【发布时间】:2015-01-19 04:50:36
【问题描述】:
我是 Laravel 的新手,正在尝试创建一个复杂的、雄辩的查询,但是我一生都无法弄清楚如何去做!这是使用多供应商商店结构。
我有以下型号:
用户有很多产品
产品有很多 OrderItem
OrderItems 属于 To Order
订单属于用户
用户可以有自己的产品,也可以有自己的订单。每个订单都有多个订单项目,每个订单项目都有一个与之关联的产品。
当我想通过传回单个订单对象来获取它时,我可以执行以下操作:
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,但显然这会返回一个平坦的响应而不是对象。这是目前实现这一目标的最佳方式吗?
【问题讨论】:
-
第二个查询不行?顺便
Order::with('OrderItems.Product.User')就够了 -
告诉我们您想要实现的目标。现在您没有具体说明第一个查询,更不用说第二个了。显然后者是不行的,因为没有
join,所以查询users的时候不能引用orders表。 -
lukasgeiter - 不,第二个查询不起作用,它只是表明我要达到的目标
-
Jarek Tkaczyk - 我已经完成了,我正在尝试从第一个查询中获取相同的信息,但相反。所以我应该得到一个用户对象数组,其中包含嵌套的产品、订单项和订单对象,但只有在它们与特定订单相关联时才包含在内。所以我不希望用户销售的任何其他产品出现。这是否更有意义?谢谢
-
lukasgeiter - 也感谢关于 Order::with('OrderItems.Product.User') 的注释,我看到其他人把它完整地写出来了!