Laravel对关系总和

时间:2018-04-10 07:36:36

标签: laravel eloquent

我正在尝试构建查询以获取具有关系Orders的所有products,其中products金额大于或等于某个值。

order可以有多个products,产品有一个名为amount的属性。 现在我需要做的是获取Orders,其中products的总金额(所有相关products的财产金额之和)符合条件。

$orders = Order::
when( $request->amount, function($query) use ($request){
    $query->whereHas('products', function($q) use ($request){
        $q->where('amount', '>=', $request->amount);
    });
})
->get();

此代码的作用是检查每个连接产品的金额是否大于或等于输入,但我无法绕过它来检查sum的{所有已连接的amount上的{1}}。有小费吗?

1 个答案:

答案 0 :(得分:3)

使用此:

$orders = Order::
when( $request->amount, function($query) use ($request){
    $query->whereHas('products', function($q) use ($request){
        $q->select(DB::raw('sum(amount) amount'))
            ->having('amount', '>=', $request->amount);
    });
})
->get();