我是Laravel的新手,我正在尝试创建一个复杂的雄辩查询,但是我无法为我的生活找到如何做到这一点!这是使用多厂商店结构。
我有以下型号:
用户有很多产品
产品有很多OrderItem
OrderItems属于订单
订单属于用户
用户可以拥有自己的产品,用户也可以拥有自己的订单。每个订单都有多个订单商品,每个订单商品都有一个与之关联的产品。
当我想通过传回单个订单对象来获取它时,我可以执行以下操作:
Order::with('OrderItems', 'OrderItems.Product', 'OrderItems.Product.User')
->whereUser_id($this->user_id)->first();
这为我提供了我需要的所有信息,但是如果我想以相反的顺序获得完全相同的信息,我怎么能这样做,例如...
User::with('Products', 'Products.OrderItem', 'Products.OrderItem.Order')
->where('Order.order_id', '=', 1)->get();
有人能指出我正确的方向吗?我尝试过使用DB::Raw
,但显然会返回平坦的响应,而不是对象。这是目前实现这一目标的最佳方式吗?
答案 0 :(得分:0)
不确定这是否是您想要的,但您可以使用with()
(带闭包)和whereHas()
的组合:
User::with(['Products.OrderItem.Order' => function($q){
$q->where('Order.order_id', 1);
}])
->whereHas('Products.OrderItem.Order', function($q){
$q->where('Order.order_id', 1);
})
->get();
with()
会急切加载ID为1的订单,而whereHas
会过滤掉所有没有ID为1的订单的用户。