spatie / laravel-query-builder

Easily build Eloquent queries from API requests
https://spatie.be/docs/laravel-query-builder
MIT License
4k stars 392 forks source link

Modify request values before using querybuilder #929

Closed Hesesses closed 4 months ago

Hesesses commented 4 months ago

Hello,

I would like to force some filters (for example status must be published unless you are admin)

my tests with and without filter params:

$response = $this->get($this->apiUrl.'?filter[status]='.EventStatus::Published); // this works
$response = $this->get($this->apiUrl); // doesnt work with forced filters

Controller:

$request->merge([
  'filter' => [
    'status' => EventStatus::Published
  ]
]);

dd($request->all()); // shows 'status' => 'published' for both tests
$events = QueryBuilder::for(Event::class)
            ->allowedFilters(['status'])
            ->jsonPaginate();

// $events includes all published and private events when query params filters not used

Am I doing something wrong or how this case should be handled?

Hesesses commented 4 months ago

Seems like when I use request()->merge() instead of $request->merge() everything works