Download the PHP package foxws/laravel-scout-relations without Composer
On this page you can find all versions of the php package foxws/laravel-scout-relations. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download foxws/laravel-scout-relations
More information about foxws/laravel-scout-relations
Files in foxws/laravel-scout-relations
Package laravel-scout-relations
Short Description Automatically re-index Scout-searchable related models.
License MIT
Homepage https://github.com/foxws/laravel-scout-relations
Informations about the package laravel-scout-relations
Laravel Scout Relations
Automatically re-index Scout-searchable related models when an Eloquent model is saved or deleted.
When a parent model changes (e.g. an Author), its related Searchable models (e.g. Post) are automatically queued for re-indexing, keeping your search index consistent without any manual intervention.
See the full documentation (or browse Artisan Command.
Requirements
- PHP 8.4+
- Laravel 12+
- Laravel Scout
Installation
Install the package via Composer:
Usage
Add the HasSearchableRelations trait to any Eloquent model whose changes should trigger re-indexing of related models. Then override searchableRelations() to return the relationship names to watch.
The related Post model must use Laravel Scout's Searchable trait:
Now whenever an Author is saved with changes or deleted, all of its Post records are automatically re-indexed.
How it works
The trait hooks into Eloquent's saved and deleted model events:
saved— re-indexes relations only whenwasChanged()istrue, avoiding unnecessary indexing on no-op saves.deleted— re-indexes relations unconditionally so the search index reflects the parent's removal.
Re-indexing is performed in chunks via chunkById. If the related model defines makeAllSearchableUsing(), it is applied to the chunk query, preventing N+1 queries.
A per-class re-entry guard prevents infinite cascades when mutual relationships exist.
Configuration
Publish the config file with:
Available options in config/scout-relations.php:
| Key | Env variable | Default | Description |
|---|---|---|---|
enabled |
SCOUT_RELATIONS_ENABLED |
true |
Disable all automatic relation syncing |
chunk.searchable |
SCOUT_RELATIONS_CHUNK_SEARCHABLE |
500 |
Chunk size for searchable() calls |
chunk.unsearchable |
SCOUT_RELATIONS_CHUNK_UNSEARCHABLE |
500 |
Chunk size reserved for future use |
Artisan command
To manually force re-indexing of all relations for a model (ignoring the enabled flag), use:
This chunks through every record of the given model and calls reindexSearchableRelations() on each, with a progress bar.
Testing
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
- francoism90
- All Contributors
License
The MIT License (MIT). Please see License File for more information.
All versions of laravel-scout-relations with dependencies
illuminate/contracts Version ^12.0|^13.0
laravel/scout Version ^10.0|^11.0
spatie/laravel-package-tools Version ^1.16