petkopara/multi-search-bundle
Symfony bundle that adds a Multi Search service and form type for Doctrine. Build a QueryBuilder to search across all or selected entity columns using a single term, with optional wildcard matching, and reuse it in your controllers or forms.
Pros:
QueryBuilder (or Query in Laravel terms), enabling further chaining (e.g., pagination, sorting).FormRequest or custom form builders (e.g., Laravel Collective or Filament).Cons:
FormBuilder, DependencyInjection, and Kernel make direct Laravel integration non-trivial (requires abstraction layers).searchEntity() logic using Eloquent’s QueryBuilder or raw SQL.
class MultiSearchService {
public function search(Builder $query, string $model, string $searchTerm, array $fields = [], string $type = 'wildcard') {
// Translate Symfony logic to Laravel/Eloquent
}
}
FormRequest or a package like laravel-form to mirror the MultiSearchType.Builder vs. Doctrine’s QueryBuilder requires method mapping (e.g., where() vs. andWhere()).LIKE '%term%') are slow on large datasets. May need database-level optimizations (e.g., full-text indexes).spatie/laravel-searchable) sufficient?beberlei/doctrineextensions (for advanced DB features).scout-apm/scout (for search-as-a-service).laravel-excel/maatwebsite (for complex data filtering).Laravel Compatibility:
FormType, DependencyInjection) require abstraction.| Symfony Component | Laravel Equivalent | Notes |
|---|---|---|
FormBuilder |
FormRequest + Request |
Use Illuminate\Http\Request or Laravel Collective forms. |
QueryBuilder |
Eloquent Builder |
Method signatures differ (e.g., andWhere vs. where). |
Service Container |
Laravel’s IoC | Bind service manually or use facades. |
Doctrine ORM |
Eloquent | Similar but not identical APIs. |
Non-Functional Requirements:
MATCH ... AGAINST in MySQL).LIKE queries, Scout, Algolia).searchEntity() logic.Post with title and body fields).illuminate/support).// app/Traits/MultiSearchable.php
trait MultiSearchable {
public function scopeMultiSearch($query, string $searchTerm, array $fields = [], string $type = 'wildcard') {
foreach ($fields as $field) {
$query->where($field, $type === 'wildcard' ? "%{$searchTerm}%" : $searchTerm);
}
return $query;
}
}
MultiSearchType with a Laravel form builder (e.g., using Laravel Collective or Filament).use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'search' => 'required|string',
]);
$query = Post::query()->multiSearch($request->search, ['title', 'body']);
QueryBuilder uses andWhere(), orWhere(), etc., while Eloquent uses where() with method chaining.doctrine/orm in Laravel (not recommended; adds complexity).composer.json to target PHP 8.0+.symfony/form, symfony/dependency-injection: Replace with Laravel equivalents or isolate logic.MultiSearchService in Laravel.How can I help you explore Laravel packages today?