我的系统中有一个订单表和一个order_details表。 订单表和订单明细表之间的关系是一对多的,这意味着一个订单有很多订单明细。
现在的问题是我正在尝试使用order_details表中存储的项目数量a过滤订单。
我做对的事情知道尝试使用whereHas
if ($request->has('quantity') && $request->quantity != null){
$query = $query->whereHas('orderDetails',function ($q) use ($request){
$q->whereRaw('SUM(Quantity) >= '.$request->quantity);
});
}
$orders = $query->orderBy('OrderID','desc')->get();
但是会引发错误
General error: 1111 Invalid use of group function (SQL: select * from `orders` where `AddedToCart` = 0 and `PaymentSucceeded` = 1 and exists (select * from `order_details` where `orders`.`OrderID` = `order_details`.`OrderID` and SUM(Quantity) >= 12) order by `OrderID` desc)
如果能找到解决办法,我将不胜感激
答案 0 :(得分:0)
要使用sum
功能,您需要group by
数据,并且据我所知,您正在尝试按orderID对它们进行分组。
这样的方法可能会有所帮助:
$ordersIDs = DB::table('orderDetails')
->groupBy('OrderID')
->havingRaw('SUM(Quantity)', '>=', 12)
->pluck('orderID')->toArray();
$orders = DB::table('orders')
->whereIn($ordersIDs)
->get();
上面的代码执行两个SQL查询,您可以轻松地将它们混合在一起以构成一个。
希望有帮助。