Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Query Builder Laravel Package

spatie/laravel-query-builder

Build safe, flexible Eloquent queries from incoming API requests. Supports whitelisted filtering (partial/exact/scope/custom), sorting, includes, field selection, pagination, and grouped AND/OR filters—ideal for JSON:API-style endpoints with minimal boilerplate.

View on GitHub
Deep Wiki
Context7

title: Multi value delimiter weight: 4

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' => '',
];

If you need only filter values to stay intact globally, you can disable filter delimiter splitting in config:

// config/query-builder.php

'filter_value_splitting_enabled' => false,

This only affects filter values. Includes, sorts, fields, and appends will continue using the configured global delimiter. The default value is true.

Per filter 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('')
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope