如何根据交易类型加载关系模型总和?

问题描述 投票:0回答:1

我创建了两个模型 包含字段 id、名称、分行的银行 带有 ID、来源、金额、类型的交易

银行模型包含关系

这里的来源是银行表格中的ID

public function transaction()
{
        return  $this->hasMany(Transaction::class,'source');
}

交易模型包含关系 公共职能

public function bank()
{
        return $this->belongsTo(Bank::class,'source');
}
public function credit()
{
    return  $this->hasMany(Transaction::class,'source','source');
}
public function debit()
{
        return  $this->hasMany(Transaction::class,'source','source');
}

Sample output

事务控制器中的代码

$summary = Transaction::selectRaw('source')
->with(['bank','credit'=>function($query){
        $query->where('transactions.type','credit');
    },'debit'=>function($query){
        $query->where('transactions.type','debit');
}])
->groupBy('source')
->get();

结果包含信用卡和借记卡密钥内的数组,而不是总计

mysql laravel php-8.2
1个回答
0
投票

您可以通过使用银行模型来实现这一点

$summary = Bank::with(['transaction' => function ($query) {
        $query->selectRaw('source, SUM(CASE WHEN type = "credit" THEN credit ELSE 0 END) as credit_sum, SUM(CASE WHEN type = "debit" THEN debit ELSE 0 END) as debit_sum')
            ->groupBy('source');
    }])
    ->get();

通过这种结构,结果中的每个

Bank
对象都会有一个
transaction
属性,它是该银行的交易集合,包括
total count
credit sum
debit sum

© www.soinside.com 2019 - 2024. All rights reserved.