при использовании laravel scout searchable () не обновляет связанные модели - PullRequest
0 голосов
/ 03 мая 2020

У меня проблема с обновлением связанных моделей с поиском scout elasti c.

$event->priceranges()->delete();
$event->priceranges()->Create([
       'price' => $ticket['ticket_price']
]);
$event->update([ 
      'show_times' => $request->showtimes,
]);
$event->searchable();

В моей базе данных я вижу обновление таблиц событий и ценового диапазона. Однако, когда я смотрю на данные поиска elasti c, обновляются только данные о событии. Все связанные модели не обновляются.

Если я сделаю второе обновление модели и модели ценового диапазона, то в данных поиска elasti c будут показаны мои данные из первого выполненного мной обновления (это всегда одно обновление для связанных моделей) Я попытался сделать

$event->pricerange->searchable()

, но выдает ошибку, потому что у меня нет поискового индекса для ценового диапазона, я просто использую свою модель событий и ее связь с индексом. Есть ли способ заставить обновление, кроме searchable ()?

1 Ответ

0 голосов
/ 03 мая 2020

Похоже, ваши отношения индексируются в модельном индексе Event, верно?

Возможно, оно не обновляется, потому что отношения уже загружены, а Laravel не обновляет данные отношений, которые уже загружен, например:

$event = Event::with('priceranges')->first()
var_dump($event->priceranges->count()): // outputs for example 5

$event->priceranges()->create([...]);
var_dump($event->priceranges->count()): // still outputs 5, meaning that the created pricerange is not loaded

Итак, чтобы исправить эту проблему, вы можете перезагрузить модель перед вызовом searchable():

$event = $event->fresh();
$event->searchable();

Но обратите внимание, что каждый раз, когда вы обновляете, метод поиска уже вызывается, поэтому вы будете индексировать его два раза при каждом обновлении.

Таким образом, в качестве альтернативы вы можете обновить метод toSearchableArray() в модели Event, чтобы получить модель fre sh перед возвратом данных (я предполагаю, что вы используете babenkoivan/scout-elasticsearch-driver).

...