
Disable Laravel Scout when saving a model
1 Jul 2022 #database #laravel #php #eloquent #scout #search
When you use Laravel Scout for full-text search, you'll probably know that it triggers a reindex of a model every time you call the save
method.
In my scenario, this wasn't exactly what I wanted to happen. The idea is that the searchable content of my model depends on a relationship which might not exist yet.
To get around this, you can temporarily pause the indexing by using the withoutSyncingToSearch
method.
Our code ended up looking something like this:
$document = Document::withoutSyncingToSearch(function () use ($fileName, $url) { $document = Document::create([ 'company_id' => $this->company->id, 'name' => $fileName, ]); // This does not trigger the search indexing $document->save(); DocumentVersion::create([ 'document_id' => $document->id, 'name' => $document->name, 'url' => $document->url, ]); } // This does trigger the search indexing$document->save();
The documentation explains the method like this:
Sometimes you may need to perform a batch of Eloquent operations on a model without syncing the model data to your search index. You may do this using the
withoutSyncingToSearch
method. This method accepts a single closure which will be immediately executed. Any model operations that occur within the closure will not be synced to the model's index: