我创建了两个模型 包含字段 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');
}
事务控制器中的代码
$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();
结果包含信用卡和借记卡密钥内的数组,而不是总计
您可以通过使用银行模型来实现这一点
$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
。