Requêtes WHERE multiples dans Laravel Eloquent : du débutant au pro

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Comment créer des requêtes avec des conditions WHERE multiples dans Laravel Eloquent



Avez-vous déjà pensé : « Je dois filtrer des enregistrements selon trois conditions différentes, mais la syntaxe d'Eloquent est un peu confuse » ? Si oui, vous n'êtes pas seul. La question "How to Create Multiple Where Clause Query Using Laravel Eloquent?" sur Stack Overflow a recueilli des milliers de vues, et ce n'est pas surprenant. Travailler avec une base de données est le cœur de toute application PHP, et la capacité à construire des requêtes complexes distingue le débutant du professionnel.



Dans cet article, nous allons examiner toutes les façons de créer des conditions WHERE multiples dans Laravel Eloquent : des chaînes les plus simples aux constructions logiques imbriquées. Vous apprendrez à combiner AND et OR, à utiliser whereHas pour les modèles associés et à éviter les erreurs typiques. C'est parti !



Syntaxe de base : chaîne WHERE



La façon la plus évidente d'ajouter plusieurs conditions est simplement d'appeler where() plusieurs fois de suite. Par défaut, toutes les conditions sont reliées par AND.



// Obtenir tous les utilisateurs dont status = 'active' ET role = 'admin'$users = User::where('status', 'active')             ->where('role', 'admin')             ->get();

// SQL équivalent :// SELECT * FROM users WHERE status = 'active' AND role = 'admin'


On peut passer un tableau de conditions :



$users = User::where([    ['status', '=', 'active'],    ['role', '=', 'admin'],])->get();


Les deux options fonctionnent, mais la première est plus facile à lire, surtout lorsqu'il y a beaucoup de conditions.



Condition OR : quand il faut « ou »



Et si nous devons trouver des utilisateurs qui sont OU actifs, OU administrateurs ? C'est là qu'intervient orWhere().



// Utilisateurs dont status = 'active' OU role = 'admin'$users = User::where('status', 'active')             ->orWhere('role', 'admin')             ->get();

// SQL : SELECT * FROM users WHERE status = 'active' OR role = 'admin'


⚠️ Avertissement important : Si vous mélangez where et orWhere, rappelez-vous de la priorité des opérateurs. Laravel les traite séquentiellement, donc le résultat peut différer de celui attendu.



Exemple avec un piège



// Nous voulons : (status = 'active' AND role = 'admin') OR (plan = 'premium')$users = User::where('status', 'active')             ->where('role', 'admin')             ->orWhere('plan', 'premium')             ->get();

// SQL : WHERE status = 'active' AND role = 'admin' OR plan = 'premium'// Ce n'est PAS la même chose !


Pour obtenir le résultat correct, utilisez le regroupement avec une fermeture :



$users = User::where(function ($query) {    $query->where('status', 'active')          ->where('role', 'admin');})->orWhere('plan', 'premium')  ->get();

// SQL : WHERE (status = 'active' AND role = 'admin') OR plan = 'premium'


WHERE imbriqués : regroupement de conditions



Lorsque la logique devient plus complexe, les fermetures imbriquées viennent à la rescousse. C'est l'outil le plus puissant pour créer des conditions complexes.



// (age > 18 AND status = 'active') OR (age <= 18 AND parent_approved = 1)$users = User::where(function ($query) {    $query->where('age', '>', 18)          ->where('status', 'active');})->orWhere(function ($query) {    $query->where('age', '<=', 18)          ->where('parent_approved', 1);})->get();


Le code se lit comme un livre : « trouve les utilisateurs qui sont majeurs et actifs, OU mineurs avec approbation parentale ».



Conditions avec opérateurs : WHERE IN, BETWEEN, NULL



Eloquent prend en charge tous les opérateurs SQL standard. Voici quelques-uns utiles :



whereIn — vérification d'appartenance à une liste



<

Blogs

Book Recommendations