Pros:
where() chaining.Cons:
doctrine/orm + illuminate/database).QueryBuilder methods to Eloquent equivalents (e.g., isNotNull() → whereNotNull()).where() + orWhere() or packages like spatie/laravel-query-builder may offer tighter integration.DQL functions, complex joins).DQL, native queries)?doctrine/orm (Laravel’s Eloquent is a subset; full Doctrine may need extra setup).QueryBuilder interface.doctrine/orm and andrii-mz/doctrine-qb-filter.isNotNull, equals) with a Doctrine entity.class LaravelQueryFilterAdapter
{
public function applyFilter(FilterRequest $filter, Builder $query): Builder
{
// Map Doctrine filter syntax to Eloquent
if ($filter->filter['task']['is_not_null']) {
return $query->whereHas('tasks');
}
// ...
}
}
where() clauses with the adapter in repositories/services.| Feature | Doctrine QB Filter | Laravel Eloquent | Workaround Needed? |
|---|---|---|---|
Basic where clauses |
✅ Yes | ✅ Yes | ❌ No |
| Nested relations | ✅ Yes | ✅ Yes | ⚠️ Manual mapping |
| Custom DQL functions | ✅ Yes | ❌ No | ✅ Fork/extend |
| Query scopes | ❌ No | ✅ Yes | ⚠️ Post-filter application |
| Global scopes | ❌ No | ✅ Yes | ⚠️ Pre-filter application |
equals, gt, isNotNull).spatie/laravel-query-builder.where() clauses to maintain.FilterRequest).EXPLAIN).| Scenario | Impact | Mitigation |
|---|---|---|
| Filter syntax error | Broken queries | Validate FilterRequest early. |
| Doctrine-Eloquent mismatch | Silent query failures | Add query validation middleware. |
| Package abandonment | No security updates | Fork and maintain. |
| Complex filter timeouts | Slow API responses | Set query timeouts (e.g., setMaxExecutionTime). |
How can I help you explore Laravel packages today?