Changelog
All notable changes to laravel-searchable will be documented in this file.
1.0.2 - 2026-04-18
What's changed
- fix PHPStan conflict with mixin
- improve docs
- Add externalLimit cap for external searches
Full Changelog: 1.0.1...1.0.2
1.0.1 - 2026-04-16
What's changed
- Add case sensitivity docs for searches
Full Changelog: 1.0.0...1.0.1
1.0.0 - 2026-04-16
What's changed
First public release.
Features
-
Searchabletrait for Eloquent models. Adduse Mozex\Searchable\Searchable;to a model, definesearchableColumns(), and call->search('term')on any query. Conditions are wrapped in aWHERE (... OR ...)group so the scope composes cleanly with existing constraints. -
Five column types in one array. Mix direct columns (
'title'), relation columns via dot notation ('author.name','tags.name'), morph relations via colon+dot notation ('commentable:post.title'), and cross-database relations — all detected automatically from the string format. Nested relations inside morph targets work too ('commentable:post.author.name'). -
Cross-database search without configuration. When a
BelongsTorelation points to a model on a different connection, the package runs a separate query on that connection, fetches matching IDs (capped at 50), and useswhereInon the foreign key. Same for morph relations to external connections. Nothing to wire up. -
Per-query column filtering. Pass
in: [...]to overridesearchableColumns(),include: [...]to add columns on top, orexcept: [...]to remove columns — all accept a string or an array. -
Filament table integration. When Filament is installed, an
advancedSearchable()macro is registered onTextColumn. Add it to one column and the table search box queries every column the model declared as searchable. -
Filament global search provider.
SearchableGlobalSearchProviderplugs into a panel via->globalSearch(...)and uses each resource'sgetGloballySearchableAttributes()as the column filter. Resources whose models don't use theSearchabletrait fall back to Filament's default global search behavior. -
applySearch()escape hatch. When a custom Eloquent Builder owns thesearch()name (Corcel'sPostBuilderis the textbook case) or a parent model already declaresscopeSearchwith a different signature,$model->applySearch($query, 'term', ...)invokes the scope without going through the conflicting name. -
Laravel Scout coexistence. Scout adds a static
search()method, this package adds a query scope — different call paths, no collision. For clarity, the README documents the trait-aliasing pattern (use Searchable { scopeSearch as scopeDatabaseSearch; }) so each entry point gets its own name. -
Laravel Boost skill. Ships at
resources/boost/skills/searchable-development/SKILL.mdand loads automatically onphp artisan boost:install. Covers all five column types, column filtering, Filament integration, Scout coexistence, and theapplySearchescape hatch.
Requirements
- PHP 8.2+
- Laravel 11, 12, or 13
- Filament 4 or 5 (optional, only if you want the macro and global search provider)