我有一张Product Orders
的桌子。订单属于Customer
(买方),其ID在订单记录中。我可以获得默认hasMany
关系的客户订单
// Customer model
public function orders() {
return $this->hasMany(Order::class);
}
另一方面,由于每个Product
属于Customer
(不同于id的顺序)Customer
(卖方),我希望其他Customer
可以看到Order
列表中有Product
。
我想获得客户Order
s的列表,无论他是卖家还是买家。我想创建自定义关系或修改关系以实现结果。
是否有可能通过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();
我假设你已经定义了所有的关系。使用where()
过滤买家和orWhereHas()
过滤卖家:
Order::where('customer_id', auth()->id())
orWhereHas('product.seller', function($q) {
$q->where('id', auth()->id());
})
->get();
如果查询中有其他where子句,请使用where()
闭包来包装orWhereHas()
和where()
。