2016-11-05 5 views
0

私は、俳優をリレーショナルテーブルとして使用してムービーテーブル用にAlogliaを実装しています。Algolia Update Index Laravel Scoutによるリレーショナルデータベースの変更について

問題:

私は任意のムービーそのもalgoliaインデックス(その良い)の更新を更新します。しかし、リレーショナルテーブルを変更した場合(たとえば、映画の俳優を更新する場合など)、インデックスを更新するにはどうすればよいですか。

laravel scoutを使用して特定のレコードを手動でプッシュする方法。

ありがとうございました

答えて

0

問題自体はlaravelのイベントにあります。何が起こっているのかスカウトは、モデルオブジェクトが保存されて汚れている(別名値がdbとは異なる)ときにのみ、laravelで発生する「更新された」イベントを待ちます。

これには2通りの方法があります。

怠惰な方法は、保存する前に->touch()をモデルに追加するだけです。これにより、updated_atフィールドが更新され、最終的に更新されたイベントがトリガされます。 DBクエリを浪費しているので、これは悪いことです。

第2の好ましい方法は、オブジェクトが汚れているかどうかに関係なく、トリガーされる「保存済み」に別のオブザーバーを登録することです。おそらく、モデルが汚れていないかどうかをチェックし、そうでないときはインデックスのみ(更新されたイベントからの二重のインデックス作成を防止する)か、スカウトにある「更新された」リスナーの登録を解除するかのどちらかです。

関連する問題