我正在尝试通过急切的加载选择列值的总和。
我的查询是
$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
答案 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');
这使您可以保留对象集合($transactions
,name
和id
字段,如您指出的必要),并且仍然从原始查询中获取总和。