Laravel查询结构

Laravel查询结构,laravel,eloquent,Laravel,Eloquent,我对拉拉维尔是个新手,我正在尝试创建一个复杂的、有说服力的问题,但是我一辈子都不知道该怎么做!这是使用多供应商商店结构 我有以下型号: 用户有很多产品 产品有许多订单项 OrderItems属于订单 订单属于用户 用户可以拥有自己的产品,也可以拥有自己的订单。每个订单都有多个订单项,每个订单项都有一个与之关联的产品 当我想通过传回单个order对象来获取它时,我可以执行以下操作: Order::with('OrderItems', 'OrderItems.Product', 'OrderItem

我对拉拉维尔是个新手,我正在尝试创建一个复杂的、有说服力的问题,但是我一辈子都不知道该怎么做!这是使用多供应商商店结构

我有以下型号:

用户有很多产品
产品有许多订单项
OrderItems属于订单
订单属于用户

用户可以拥有自己的产品,也可以拥有自己的订单。每个订单都有多个订单项,每个订单项都有一个与之关联的产品

当我想通过传回单个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
,但显然它返回的是一个平坦的响应,而不是对象。这是目前实现这一目标的最佳方法吗?

不确定这是否是您想要的,但您可以将
与()
(带闭包)和
whereHas()结合使用:


with()
将仅加载id为1的订单,而
whereHas
将筛选出没有id为1的订单的所有用户。

第二个查询不起作用?顺便说一下,
Order::with('OrderItems.Product.User')
已经足够了,请告诉我们您想要实现什么。现在您对第一个查询没有具体说明,没有提到第二个查询。显然后者不起作用,因为没有
join
,所以在查询
用户时不能引用
订单
表。卢卡斯盖特-不,第二个查询不起作用,它只是表明我试图得到Jarek Tkaczyk的东西-我已经做了,我试图得到与第一个查询相同的信息,但结果相反。所以我应该得到一个用户对象数组,其中嵌套了product、order项和order对象,但只有当它们与特定的订单关联时才包含它们。所以我不希望用户销售的任何其他产品出现。这有意义吗?感谢SlukasGeiter-也感谢关于Order::with('OrderItems.Product.User')的说明,我已经看到其他人完整地写了出来!啊,我明白,所以这是一个两步的过程。使用with获取所有数据,然后使用WHERHAS对其进行过滤。对我来说,with方法是有效的,但是WHERHAS只有在我移除除第一次关系以外的所有东西时才有效<代码>$users=User::with(数组('Products.OrderItems.Order'=>函数($q){$q->where('orders.id',4);}))->whereHas('Products',函数($q){$q->where('Products.id',92);})->get()
Its抛出
调用undefined方法illumb\Database\Query\Builder::Products.OrderItems.Order()
感谢您迄今为止的帮助,它对我的理解有很大帮助!更新您的Laravel安装(
composer Update
)。最近添加了对与
的嵌套关系的支持。啊,感谢lukasgeiter,我可以从@Jarek的评论中看到它仍在开发中,这就是为什么我现在没有它的原因。谢谢你们的帮助!
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();