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 订单的用户。
我是 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 订单的用户。