Laravel渴望通过条件选择加载不起作用

时间:2019-02-05 20:36:26

标签: php laravel laravel-5 eloquent eager-loading

我正在尝试通过急切的加载选择列值的总和。

我的查询是

$transactions = Service::with(['transactions' => function($query) use ($queryData){
        $query->whereIn('status',['Success','Pending','Successful','Processing']);
        $query->whereDate('created_at','>=', $queryData);
        $query->addSelect(DB::raw("SUM(deducted) as adjustment"));
}]);

但是我的回应没有得到任何补偿。

我得到的响应看起来像

"id": "3",
"name": "Service Name",
"transactions": [ ]

但是应该是

"id": "3",
"name": "Service Name",
"adjustment": 30

2 个答案:

答案 0 :(得分:1)

使用withCount()

$transactions = Service::withCount(['transactions as adjustment' => function($query) use ($queryData){
    $query->whereIn('status',['Success','Pending','Successful','Processing']);
    $query->whereDate('created_at','>=', $queryData);
    $query->select(DB::raw('SUM(deducted)'));
}]);

答案 1 :(得分:0)

您可能希望在集合上使用sum函数,而不是在查询内部使用原始SQL。仍然只打过一次数据库:

我不知道扣除额位于何处,但是如果在模型上(上面的查询中看起来像),这将为您提供所查询交易的总和:

$adjustment= $transactions->sum('deducted');

或者如果是恋爱关系

$adjustment= $transactions->sum(function ($transaction) {
    return $transaction->transaction?->sum('deducted');
});

您也可以使用点符号获取相关字段:

$adjustment= $transactions->sum('transaction.deducted');

这使您可以保留对象集合($transactionsnameid字段,如您指出的必要),并且仍然从原始查询中获取总和。