mercredi 10 octobre 2018

Replace Laravel query callback with function

I have the following base query I use for retrieving collections with their relations, scopes, sorting, filtering,... This base query is used on almost all my models by extending the class this base query is in.

        return $this->runSortQuery(
            $query->when($request->has('filter'),
                function($query) use ($request) {
                    return $query->search($request->filter);
                }
            )->when($request->has('with'), 
                function($query) use ($request) {
                    return $query->with(
                        explode(',', $request->with)
                    );
                }
            )->when($request->has('scopes'),
                function($query) use ($request) {
                    return $query->scopes(
                        json_decode($request->scopes, true)
                    );
                }
            ) /* and so on... */, $request
        )->paginate((isset($request->paginate)) ? $request->paginate : 15);

Is it possible to replace the callback in every when with a custom function call? The reason I want this is because this base function is getting really long and I would like the method in the callback in it's own function, for readability and to keep this maintainable.

I tried this, but this obviously does not work.

$query->when($request->has('filter'), $this->filter($query, $request->filter))
      ->when($request/* and so on... */);

Can this be done in another way or what would be a good pattern or method to do this?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire