我需要在laravel上获取belongsTo
模型的金额总和
这是我的代码
控制器:
$users = AffiliationUser::whereAffiliationId(Auth::user()->id)
->with(['user' => function ($q){
$q->withCount(['billings'])->with(['affiliation_transactions']);
}])
->paginate(3);
//dd($users);
return view('affiliation.users', [
'users' => $users,
'current_balance' => 0,
]);
会员用户模型:
public function user() {
return $this->belongsTo('App\Models\Users');
}
用户模型:
public function billings() {
return $this->hasMany('App\Models\UserBillingSchedules', 'user_id');
}
public function affiliation_transactions() {
return $this->hasMany('App\Models\AffiliationTransaction', 'user_id');
}
查看:
@foreach ($users as $user)
<tr class="even pointer">
<td class="a-center ">{{ $user->user->id }}</td>
<td class=" ">{{ $user->user->email }}</td>
<td class=" ">{{ $user->user->card_holder }}</td>
<td class=" ">{{ $user->user->billings_count }}</td>
<td class=" ">{{ $user->user->affiliation_transactions->sum('amount') }}</td>
</tr>
@endforeach
这对我来说很好,但是我不喜欢将它展示出来的想法。
{{ $user->user->affiliation_transactions->sum('amount') }}
我还可以使用哪种解决方案?
答案 0 :(得分:1)
您可以使用withCount()
计算总和:
$users = AffiliationUser::whereAffiliationId(Auth::user()->id)
->with(['user' => function ($q) {
$q->withCount([
'billings',
'affiliation_transactions as amount' => function ($q) {
$q->select(DB::raw('coalesce(sum(amount), 0)'));
}
]);
}])
->paginate(3);
{{ $user->user->amount }}
答案 1 :(得分:1)
Laravel允许您创建自定义属性(轻松使用get[attributename]Attribute
中的Models
方法,该方法可以减少所需编写的代码量。在这种情况下,您可以执行此操作:
用户模型:
public function getTransactionCountAttribute() {
return $this->affiliation_transactions->sum('amount');
}
现在可以在您的代码中使用以下方法来实现:
$user->user->transaction_count
此外,这里还有关于Mutators的更多信息,因为它们是被命名的。希望它们对您有用:)
答案 2 :(得分:0)
在用户模型中,创建类似以下方法:
public function sum_amount() {
return this.affiliation_transactions->sum('amount');
}
然后在您看来...
{{ $user->user->sum_amount }}