Laravel: один наблюдатель для нескольких моделей - PullRequest
1 голос
/ 04 февраля 2020

У меня есть несколько моделей, которые имеют один и тот же лог c созданный метод, могу ли я иметь одного наблюдателя для этого? Или другой подход, чтобы избежать создания нескольких наблюдателей для каждой модели?

Ответы [ 4 ]

1 голос
/ 04 февраля 2020

Для этой цели вы можете использовать загрузочную черту.

<?php
namespace App\Traits;

trait MyModelTrait
{
    public static function bootMyModelTrait()
    {
        static::created(function ($model) {
            $model->someField = 'someLogicValue';
        });
    }
}
0 голосов
/ 05 февраля 2020

Для этой цели вы можете использовать класс Observer https://laravel.com/docs/6.x/eloquent#observers

0 голосов
/ 04 февраля 2020

Вы можете зарегистрировать события на основе закрытия вручную в методе загрузки вашего EventServiceProvider:

/**
 * Register any other events for your application.
 *
 * @return void
 */
public function boot()
{
    parent::boot();

    Event::listen(['eloquent.saved: *', 'eloquent.created: *', ...], function($context) {
       // dump($context); ---> $context hold information about concerned model and fired event : e.g "eloquent.created: App\User"
       // YOUR CODE GOES HERE
    });
}
0 голосов
/ 04 февраля 2020

Я бы оставлял наблюдателя на каждую модель, но вместо этого извлекал бы Trait / базовый класс / класс обслуживания с общей функциональностью, которую вы затем можете использовать в этих наблюдателях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...