spatie/laravel-query-builder
Safely build Eloquent queries from incoming API requests. Allowlist filters, sorts, includes, and fields; supports partial/exact and custom filters, nested relationships, relation counts, and default values. Works with existing queries for clean, consistent endpoints.
Sometimes values to filter for could include commas. You can change the delimiter used to split array values by setting the delimiter key in the query-builder config file.
// config/query-builder.php
return [
'delimiter' => '|',
];
With this configuration, a request like GET /api/endpoint?filter[voltage]=12,4V|4,7V|2,1V would be parsed as:
// filters: [ 'voltage' => [ '12,4V', '4,7V', '2,1V' ]]
Note that this applies to ALL values for filters, includes and sorts.
To disable splitting entirely for all parameters, set the global delimiter to an empty string:
// config/query-builder.php
return [
'delimiter' => '',
];
You can override the delimiter for a specific filter using the delimiter() method. This is useful when a filter value may contain the default delimiter character.
// GET /api/endpoint?filter[voltage]=12,4V|4,7V|2,1V&filter[name]=John,Jane
QueryBuilder::for(Model::class)
->allowedFilters(
AllowedFilter::exact('voltage')->delimiter('|'),
AllowedFilter::exact('name'), // still uses the default comma delimiter
)
->get();
To disable splitting entirely for a filter, set the delimiter to an empty string:
AllowedFilter::exact('external_id')->delimiter('')
How can I help you explore Laravel packages today?