我有一个订单表,其中包含存储在数据透视表中的订单项。
成功处理完所有订单项后,订单将被标记为“已处理”,并需要在页面上显示。
因此,我想要获取所有已标记为“已处理”的订单以及其各自订单中包含的订单项。
我的查询如下:
$orders = DB::table('order_product')
->join('products', 'order_product.product_id', '=', 'products.product_id')
->join('orders', 'order_product.order_id', '=', 'orders.order_id')
->join('customers', 'orders.customer_id', '=', 'customers.customer_id')
->where('order_product.variation_status', '=', 'dispatch')
->where('orders.store', '!=', 'null')
->groupBy('order_product.order_id')
->get();
return response()->json($orders);
我的想法是获取所有已处理的数据透视表项,然后按 order_id 对结果进行分组,但遗憾的是这不起作用。
不幸的是,变体属性只包含数据透视表中的一个订单项,而不是两个。
有人可以帮我解决我可能做错的事吗?
更新
这是我的模特 Order.php
/**
* The products that belong to the Order.
*/
public function products()
{
return $this->belongsToMany('App\Product','order_product','order_id','product_id')
->withPivot(['qty', 'variation', 'variation_status'])
->withTimeStamps();
}
/**
* The customer that belongs to the Order.
*/
public function customer()
{
return $this->belongsTo('App\Customer', 'customer_id');
}
Product.php
/**
* The orders that belong to the product.
*/
public function orders()
{
return $this->belongsToMany('App\Order')
->withPivot(['qty', 'variation_status'])
->withTimeStamps();
}
答案 0 :(得分:1)
我不能保证这是正确的,因为我通常不使用->withPivot
并且没有运行测试环境所以现在这是我的头脑。但这可能会让您深入了解如何处理此用例。
让我们从订单作为基础开始
Order::get();
现在让我们扩展此功能以检索客户和产品的订单
Order::with('customer', 'products')->get();
我们现在要做的是解决上述雄辩查询中的条件:
->where('order_product.variation_status', '=', 'dispatch')
->where('orders.store', '!=', 'null')
您可以做的是:
Order::with(['products' => function($query){
$query->where('variation_status', 'dispatch');
}, 'customer'])
->where('store','!=','NULL')
->get();