Laravel与自定义查询有很多关系

问题描述 投票:2回答:1

我有一张Product Orders的桌子。订单属于Customer(买方),其ID在订单记录中。我可以获得默认hasMany关系的客户订单

// Customer model
public function orders() {
  return $this->hasMany(Order::class);
}

另一方面,由于每个Product属于Customer(不同于id的顺序)Customer(卖方),我希望其他Customer可以看到Order列表中有Product

我想获得客户Orders的列表,无论他是卖家还是买家。我想创建自定义关系或修改关系以实现结果。

是否有可能通过Laravel的关系实现这一目标?

客户表:

---------------------------
| customer_id |   name    | 
---------------------------
| 1           | seller    |
| 2           | buyer     |

产品表:

---------------------------------------
| product_id  |   name    | seller_id |
---------------------------------------
| 101         | iPhone 6s |   1       |

订单表

----------------------------------------
| order_id  | customer_id | product_id |
----------------------------------------
| 500       | 2           |   101      |

当使用简单的hasMany关系时,买方将在其订单列表中看到订单500。

$buyer->orders();

我想创建一个单一的关系,当我从卖方那边调用它时,他可以在他的订单列表中看到订单500。

$seller->orders();
laravel eloquent relationship
1个回答
2
投票

我假设你已经定义了所有的关系。使用where()过滤买家和orWhereHas()过滤卖家:

Order::where('customer_id', auth()->id())
    orWhereHas('product.seller', function($q) {
        $q->where('id', auth()->id());
    })
    ->get();

如果查询中有其他where子句,请使用where()闭包来包装orWhereHas()where()

© www.soinside.com 2019 - 2024. All rights reserved.