我有银行表和交易表,它们有一对多的关系。我想计算一下每家银行的余额以及银行的总余额。
银行模式:
class Bank extends Model
{
use HasFactory;
protected $fillable = [
'name',
'code',
'accountNumber',
'swiftCode',
'currency',
'country',
'city',
'street',
'zipcode',
];
public function transactions()
{
return $this->hasMany(Transaction::class);
}
}交易模式:
class Transaction extends Model
{
use HasFactory;
protected $fillable = [
'amount',
'currency',
'exchangeRate',
'reference',
'type',
'adjustment',
'partner_id',
'bank_id',
];
public function bank()
{
return $this->belongsTo(Bank::class);
}
}我为balance编写了下面的代码,这是不正确的,因为我不能使用这个集合访问事务列。
<td>{{$bank->transactions->where('type', 'credit')->sum('amount') - $bank->transactions->where('type', 'debit')->sum('amount')}}</td>有许多货币需要使用exchangRate进行标准化。我需要用exchangeRate和它的所有结果求和。所以它给了银行余额。
我应该从索引函数传递它。它应该和银行托收一起归还。BankController函数索引:
public function index()
{
$banks = Bank::all();
return view('inc.banks', compact('banks'));
}在此基础上,如何计算每个银行余额和银行总余额?
发布于 2021-04-12 04:25:35
我已经在银行和交易模型中解决了这个问题。我定义了一个自定义属性,然后将它附加到模型中。
交易模式:
protected $appends = [
'final_amount'
];
public function getFinalAmountAttribute() {
return $this->amount * $this->exchangeRate;
}银行模式:
public function getCreditSumAttribute(){
$sum = 0;
if($this->transactions){
$sum = $this->transactions->where('type', 'credit')->sum('final_amount');
}
return $sum;
}
public function getDebitSumAttribute(){
$sum = 0;
if($this->transactions){
$sum = $this->transactions->where('type', 'debit')->sum('final_amount');
}
return $sum;
}
public function getSubCreditDebitAttribute(){
return $this->credit_sum - $this->debit_sum;
}在银行的观点中,我把这个代码:
<td>{{'$ '}}{{$bank->sub_credit_debit}}</td>发布于 2021-04-10 06:34:34
您必须从控制器获取它并将其传递给视图,创建一个函数来获取数据。
//Here You will get all transactions relevant to the bank as per your relationship
$banks =Transaction::with('transactions.bank')->get();
return view('inc.banks', compact('banks'));使用输出数组,您可以手动计算所需的金额,或者可以手动查询它。
要清楚地了解输出,请使用SQL语法在数据库上手动查询。一旦您得到了正确的SQL语法,您可以使用laravel雄辩(这种方法将帮助您很大程度上了解您所做的)!祝你好运!
发布于 2021-04-10 20:18:48
你可以建立两个关系(贷方和借方),并与他们,计算银行余额和总余额。
银行模型
public function credits(){
return $this->hasMany(Transaction::class, foreign_id, primary_id)->where('type', 'credit);
}
public function debits(){
return $this->hasMany(Transaction::class, foreign_id, primary_id)->where('type', 'debit);
}刀片:
首先初始化$total变量。然后循环通过$banks以获得每家银行的余额,并将它们相加以获得总余额。
@php( $total = 0)
@foreach($banks as $key => $bank)
$balance = $bank->credits->sum('amount') - $bank->debits->sum('amount'); // $balance will have each bank balance
$total += $balance;
@endforeach
{{ $total }} // get total balance for all banks编辑
如果要对金额使用exchangeRate计算:
@php($total = 0)
@foreach($banks as $key => $bank)
$credits = 0;
$debits = 0;
@foreach($bank->transactions as $key => $transaction)
@if($transaction->type == 'credit')
$credits += $transaction->amount*$transaction->exchangeRate;
@elseif($transaction->type == 'dedit')
$dedits += $transaction->amount*$transaction->exchangeRate;
@endif
@endforeach
$balance = $credits-$debits;
$total += $balance;
@endforeach
{{ $total }}https://stackoverflow.com/questions/67031348
复制相似问题