diff --git a/src/Console/stubs/searchable_model.stub b/src/Console/stubs/searchable_model.stub index 022bc1e..f434188 100644 --- a/src/Console/stubs/searchable_model.stub +++ b/src/Console/stubs/searchable_model.stub @@ -27,4 +27,11 @@ class DummyClass extends Model protected $mapping = [ // ]; + + /** + * @var array + */ + public $searchableRelations = [ + // + ]; } \ No newline at end of file diff --git a/src/Indexers/BulkIndexer.php b/src/Indexers/BulkIndexer.php index a2b92fa..c6db381 100644 --- a/src/Indexers/BulkIndexer.php +++ b/src/Indexers/BulkIndexer.php @@ -17,6 +17,7 @@ public function update(Collection $models) { $model = $models->first(); $indexConfigurator = $model->getIndexConfigurator(); + $relations = $model->searchableRelations ?? []; $bulkPayload = new TypePayload($model); @@ -28,27 +29,28 @@ public function update(Collection $models) $bulkPayload->set('refresh', $documentRefresh); } - $models->each(function ($model) use ($bulkPayload) { - if ($model::usesSoftDelete() && config('scout.soft_delete', false)) { - $model->pushSoftDeleteMetadata(); - } + $models->loadMissing($relations) + ->each(function ($model) use ($bulkPayload) { + if ($model::usesSoftDelete() && config('scout.soft_delete', false)) { + $model->pushSoftDeleteMetadata(); + } - $modelData = array_merge( - $model->toSearchableArray(), - $model->scoutMetadata() - ); + $modelData = array_merge( + $model->toSearchableArray(), + $model->scoutMetadata() + ); - if (empty($modelData)) { - return true; - } + if (empty($modelData)) { + return true; + } - $actionPayload = (new RawPayload()) - ->set('index._id', $model->getKey()); + $actionPayload = (new RawPayload()) + ->set('index._id', $model->getKey()); - $bulkPayload - ->add('body', $actionPayload->get()) - ->add('body', $modelData); - }); + $bulkPayload + ->add('body', $actionPayload->get()) + ->add('body', $modelData); + }); ElasticClient::bulk($bulkPayload->get()); }