Laravel 查询结构

Laravel Query Structure

我是 Laravel 的新手,我正在尝试创建一个复杂的 eloquent 查询,但是我一辈子都不知道如何去做!这是使用多供应商商店结构。

我有以下型号:

Users has many Products
Products has many OrderItem
OrderItems belongs To Order
Order belongs To Users

一个用户可以拥有自己的产品,一个用户也可以拥有自己的订单。每个订单有多个Order Item,每个Order Item关联一个产品。

当我想通过传回单个订单对象来获取它时,我可以执行以下操作:

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,但显然 returns 是一个平淡的反应,而不是对象。这是目前实现此目标的最佳方式吗?

不确定这是否是您想要的,但您可以结合使用 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 订单的用户。