Multi value delimiter | laravel-query-builder | Spatie

 SPATIE

  Laravel Query Builder
========================

spatie.be/open-source

  [Docs](https://spatie.be/docs)  [Laravel-query-builder](https://spatie.be/docs/laravel-query-builder/v3)  Advanced-usage  Multi value delimiter

 Version   v7   v6   v5   v4   v3   v2

 Other versions for crawler [v7](https://spatie.be/docs/laravel-query-builder/v7) [v6](https://spatie.be/docs/laravel-query-builder/v6) [v5](https://spatie.be/docs/laravel-query-builder/v5) [v4](https://spatie.be/docs/laravel-query-builder/v4) [v3](https://spatie.be/docs/laravel-query-builder/v3) [v2](https://spatie.be/docs/laravel-query-builder/v2)

- [ Introduction ](https://spatie.be/docs/laravel-query-builder/v3/introduction)
- [ Requirements ](https://spatie.be/docs/laravel-query-builder/v3/requirements)
- [ About us ](https://spatie.be/docs/laravel-query-builder/v3/about-us)
- [ Installation &amp; setup ](https://spatie.be/docs/laravel-query-builder/v3/installation-setup)
- [ Support us ](https://spatie.be/docs/laravel-query-builder/v3/support-us)
- [ Questions and issues ](https://spatie.be/docs/laravel-query-builder/v3/questions-issues)
- [ Changelog ](https://spatie.be/docs/laravel-query-builder/v3/changelog)

Features
--------

- [ Filtering ](https://spatie.be/docs/laravel-query-builder/v3/features/filtering)
- [ Sorting ](https://spatie.be/docs/laravel-query-builder/v3/features/sorting)
- [ Including relationships ](https://spatie.be/docs/laravel-query-builder/v3/features/including-relationships)
- [ Selecting fields ](https://spatie.be/docs/laravel-query-builder/v3/features/selecting-fields)
- [ Appending attributes ](https://spatie.be/docs/laravel-query-builder/v3/features/appending-attributes)

Advanced usage
--------------

- [ Extending query builder ](https://spatie.be/docs/laravel-query-builder/v3/advanced-usage/extending-query-builder)
- [ Pagination ](https://spatie.be/docs/laravel-query-builder/v3/advanced-usage/pagination)
- [ Front-end implementation ](https://spatie.be/docs/laravel-query-builder/v3/advanced-usage/front-end-implementation)
- [ Multi value delimiter ](https://spatie.be/docs/laravel-query-builder/v3/advanced-usage/multi-value-delimiter)

      You are viewing the documentation for **an older version** of this package. You can check the version you are using with the following command:

 `                                    composer show spatie/laravel-query-builder                                                                                                                                                                                                                                    `

Multi value delimiter
=====================

###  On this page

1. [ Usage ](#content-usage)

Sometimes values to filter for could include commas. This is why you can specify the delimiter symbol using the `QueryBuilderRequest` to overwrite the default behaviour.

```
// GET /api/endpoint?filter=12,4V|4,7V|2,1V

QueryBuilderRequest::setArrayValueDelimiter('|');

QueryBuilder::for(Model::class)
    ->allowedFilters(AllowedFilter::exact('voltage'))
    ->get();

// filters: [ 'voltage' => [ '12,4V', '4,7V', '2,1V' ]]
```

**Note that this applies to ALL values for filters, includes and sorts**

Usage
-----------------------------------------------------------------------

There are multiple opportunities where the delimiter can be set.

You can define it in a `ServiceProvider` to apply it globally, or define a middleware that can be applied only on certain `Controllers`.

```
// YourServiceProvider.php
public function boot() {
    QueryBuilderRequest::setArrayValueDelimiter(';');
}

// ApplySemicolonDelimiterMiddleware.php
public function handle($request, $next) {
    QueryBuilderRequest::setArrayValueDelimiter(';');
    return $next($request);
}
```

You can also set the delimiter for each feature individually:

```
QueryBuilderRequest::setIncludesArrayValueDelimiter(';'); // Includes
QueryBuilderRequest::setAppendsArrayValueDelimiter(';');  // Appends
QueryBuilderRequest::setFieldsArrayValueDelimiter(';');   // Fields
QueryBuilderRequest::setSortsArrayValueDelimiter(';');    // Sorts
QueryBuilderRequest::setFilterArrayValueDelimiter(';');   // Filter
```

You can override the default delimiter for single filters:

```
// GET /api/endpoint?filter[id]=h4S4MG3(+>azv4z/I,>XZII/Q1On
AllowedFilter::exact('id', 'ref_id', true, ';');
```
