我有四个模型:User
,Product
,Order
,OrderItem
当User
将商品添加到购物车时,它会创建一个新的Order
,并且该商品变成新的OrderItem
。
表格:
users
id - integer
name - string
products
id - integer
name - string
orders
id - integer
user_id - integer
paid - boolean
order_items
order_id - integer
product_id - integer
quantity -integer
price - double
关系:
`Product` hasMany `OrderItem`
`OrderItem` belongsTo `Order`
`OrderItem` belongsTo `Product`
`Order` hasMany `OrderItem`
`User` hasMany `Order`
我希望能够列出所有Product
,并在每个列表下面列出购买了User
(Product
)的所有Order whereNotNull 'paid'
。
相反,我想展示他们购买的所有User
的{{1}}。
我尝试着与人际关系逐步发展。我可以让Product
工作,但不能{{ $product->orderItems }}
Laravel不允许与数据透视表建立hasManyThrough关系,实际上这是{{ $product->orderItems->orders }}
的原因,因此将不起作用。
也许我可以使用带有连接器的访问器来执行此操作,但是由于无法真正设置关系,所以无法解决这个问题。
也许是自定义的雄辩的收藏,所以每次我调用order_items
时,它已经拥有所有已付费的Product
,每次我调用User
时,收藏都已经具有了他所有的{{1} }?
答案 0 :(得分:2)
Laravel不支持直接关系。
我已经为以下情况创建了一个程序包:https://github.com/staudenmeir/eloquent-has-many-deep
class Product extends Model
{
use \Staudenmeir\EloquentHasManyDeep\HasRelationships;
public function users()
{
return $this->hasManyDeep(
User::class,
['order_items', Order::class],
[null, null, 'id'],
[null, null, 'user_id']
)->whereNotNull('orders.paid');
}
}
$users = Product::find($id)->users;