Fabrice Planchette

Utilisation de la méthode when() du query builder pour gérer le tri dans Laravel

Jul 21, 2021

Dans la continuité des scopes, la modification du Query Builder peut être fait selon les paramètres envoyés dans la requête en utilisant la méthode when().

when() ?

Imagine que tu veuilles proposer le tri des résultats d’un modèle. Pour cela non, ne fonce pas tête baissée sur un if ou un switch dans ton controlleur, on a dit d’une que https://fabpl.github.io/laravel/2021/06/18/scope-model-eloquent-laravel.html, et de deux qu’avec un when() en plus ça devient beautiful.

// Dans le controlleur
Model::filter($request);

// Et dans le modèle
public function filter(Builder $builder, Request $request): Builder
{
    $sort = $request->input('sort');

    return $builder->when(
        $sort, 
        function(Builder $builder, string $sort) {
            switch ($sort) {
                case 'name' : return $builder->orderByName();
                case 'created_at' : return $builder->orderByCreatedAt();
            }
        }, 
        function(Builder $builder) {
            return $builder->orderByName();
        }
    );
}

Tu l’as vu ? Le deuxième paramètre de when() ? Et oui, ça te permet de gérer du fallback si tu veux.

Liens