Как рассчитать сумму для принадлежащей модели laravel - PullRequest
0 голосов
/ 26 сентября 2018

Мне нужно получить сумму для модели belongsTo на laravel

Вот мой код

Контроллер:

$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,
]);

AffiliationUser model:

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 голосов
/ 26 сентября 2018

Laravel позволяет вам создавать собственные атрибуты (используя метод get[attributename]Attribute в вашем Models, который легко можно использовать для уменьшения количества кода, который вам нужно написать. В этом случае вы можете сделать это:

Модель пользователя :

public function getTransactionCountAttribute() {
  return $this->affiliation_transactions->sum('amount');
}

Теперь к этому можно обратиться с помощью следующего метода в вашем коде:

$user->user->transaction_count

Кроме того, вот немного больше информациио Мутаторы , как они названы. Надеюсь, они могут быть полезны для вас:)

0 голосов
/ 26 сентября 2018

В пользовательской модели создайте метод, подобный следующему:

public function sum_amount() {
   return this.affiliation_transactions->sum('amount'); 
}

, затем, на ваш взгляд ...

{{ $user->user->sum_amount  }}
0 голосов
/ 26 сентября 2018

Вы можете рассчитать сумму с помощью 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 }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...