Добрый день!
Возникла ситуация в коде.
Есть таблица
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 никак не реагирует.
Как мне заставить её обновится?
Я вижу тут несколько решений:
- Обновлять updated_at у новости тем самым вызывать событие
- Вызывать событие вручную \Event::fire('eloquent.updated: ' . get_class($news), [$news]);
Может есть более правильные решения данной ситуации?