Я не совсем уверен, это хорошая практика или нет, но я предпочитаю абстрагировать такие вещи в автономный сервис.
В вашем случае это будет что-то вроде этого:
CreditService
namespace App\Services;
use App\User;
class CreditService
{
private $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function addCredits($credits)
{
$this->user->credits += $credits;
$this->user->save();
}
}
Затем в контроллер / слушатель вы можете работать с этим сервисом
use App\Services\CreditService;
...
public function handle(UserReferred $event)
{
$referral = \App\ReferralLink::find($event->referralId);
if ( !is_null($referral) ) {
\App\ReferralRelationship::create([
'referral_link_id' => $referral->id,
'user_id' => $event->user->id,
]);
if ( $referral->program->name === 'Sign-up Bonus' ) {
(new CreditService($referral->user))->addCredits(15);
(new CreditService($event->user))->addCredits(20);
}
}
}
Способ, которым вы делаете, а затем используетесервис может быть другим. Итак, если вы не хотите работать через конструкторы, вы можете написать статический класс и напрямую передать User
в метод.
Я часто помещаю некоторые дополнительные действия в сервисы. Например, события огня, когда мне нужно это сделать. Или записать некоторые вещи.