@zagamay_ru

Как правильно вызвать событие?

Добрый день!

Возникла ситуация в коде.
Есть таблица news, news_tags, tags
У меня news выводятся через elasticsearch и стоит глобальный евент для прослушки обновления данной модели, чтобы пересобирать обновленные данные в elasticsearch при любых действиях в этой модели.

\Event::listen(
            ['eloquent.updated*', 'eloquent.created*', 'eloquent.deleted*'],
            function ($event, $params) {
                list($model) = $params;

                if ($model instanceof ModelSearch) {
                    /** @var ElasticSearchService $service */
                    $service = app()->make(ElasticSearchService::class);

                    if (strpos($event, 'eloquent.updated') === 0) {
                        $service->update($model);
                    }

                    if (strpos($event, 'eloquent.created') === 0) {
                        $service->add($model);
                    }

                    if (strpos($event, 'eloquent.deleted') === 0) {
                        $service->delete($model);
                    }
                }
            }
        );


Но когда я привязываю теги к этой модели, то они сохраняются в промежуточную таблицу и сама модель news никак не реагирует.
Как мне заставить её обновится?
Я вижу тут несколько решений:
  1. Обновлять updated_at у новости тем самым вызывать событие
  2. Вызывать событие вручную \Event::fire('eloquent.updated: ' . get_class($news), [$news]);


Может есть более правильные решения данной ситуации?
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
Hocopor
@Hocopor
Ищу интересную работу
Есть вот такая штука
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы