拉拉维尔急于加载条件选择不起作用



我正在尝试通过预先加载来选择我的列值的总和。

我的查询是

$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

使用 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)'));
}]);

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

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

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

或者如果在关系上

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

您也可以使用点表示法获取相关字段:

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

这些允许您保留对象集合($transactions ,以及您指出的必要的nameid字段(,并且仍然从原始查询中获取总和。

最新更新