如何计算belongsTo模型Laravel的总和

时间:2018-09-26 12:59:32

标签: php laravel

我需要在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')  }}

我还可以使用哪种解决方案?

3 个答案:

答案 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  }}