J'utilise le générateur de requêtes Laravel Eloquent et j'ai une requête où je veux une WHERE
clause sur plusieurs conditions. Cela fonctionne, mais ce n'est pas élégant.
Exemple:
$results = User::where('this', '=', 1)
->where('that', '=', 1)
->where('this_too', '=', 1)
->where('that_too', '=', 1)
->where('this_as_well', '=', 1)
->where('that_as_well', '=', 1)
->where('this_one_too', '=', 1)
->where('that_one_too', '=', 1)
->where('this_one_as_well', '=', 1)
->where('that_one_as_well', '=', 1)
->get();
Existe-t-il une meilleure façon de procéder ou dois-je m'en tenir à cette méthode?
->where(...)
appels peuvent être remplacés par un->whereIn(...)
appel, et cetera .Réponses:
Dans Laravel 5.3 (et toujours vrai à partir de 7.x ), vous pouvez utiliser des emplacements plus granulaires passés sous forme de tableau:
Personnellement, je n'ai pas trouvé de cas d'utilisation pour cela sur plusieurs
where
appels, mais le fait est que vous pouvez l'utiliser.Depuis juin 2014, vous pouvez transmettre un tableau à
where
Tant que vous voulez tous les opérateurs d'
wheres
utilisationand
, vous pouvez les regrouper de cette façon:Alors:
Ce qui précède entraînera une telle requête:
la source
=
.WHERE (a IS NOT NULL AND b=1) OR (a IS NULL AND b=2);
?$users = DB::table('users')->where([ ['status', '=', '1'], ['subscribed', '<>', '1'], ])->get();
whereNotIn
selon votre réponse avec d'autreswhere
cluases?Les étendues de requête peuvent vous aider à rendre votre code plus lisible.
http://laravel.com/docs/eloquent#query-scopes
Mise à jour de cette réponse avec un exemple:
Dans votre modèle, créez des méthodes d'étendues comme celle-ci:
Ensuite, vous pouvez appeler ces étendues lors de la création de votre requête:
la source
Vous pouvez utiliser des sous-requêtes dans une fonction anonyme comme ceci:
la source
Dans ce cas, vous pouvez utiliser quelque chose comme ceci:
Il devrait vous fournir une requête comme:
la source
Conditions utilisant Array:
Produira une requête comme ci-dessous:
Conditions utilisant la fonction Antonyme:
Produira une requête comme ci-dessous:
la source
Clauses WHERE multiples
enfin obtenir le résultat
la source
La
whereColumn
méthode peut recevoir un tableau de plusieurs conditions. Ces conditions seront jointes à l'aide duand
opérateur.Exemple:
Pour plus d'informations, consultez cette section de la documentation https://laravel.com/docs/5.4/queries#where-clauses
la source
OU
OU
la source
Assurez-vous d'appliquer tout autre filtre aux sous-requêtes, sinon le ou pourrait rassembler tous les enregistrements.
la source
la source
Sans véritable exemple, il est difficile de faire une recommandation. Cependant, je n'ai jamais eu besoin d'utiliser autant de clauses WHERE dans une requête et cela peut indiquer un problème avec la structure de vos données.
Il peut vous être utile de vous renseigner sur la normalisation des données: http://en.wikipedia.org/wiki/Third_normal_form
la source
Vous pouvez utiliser éloquent dans Laravel 5.3
Tous les résultats
Résultats partiels
la source
utiliser la
whereIn
condition et passer le tableau$array = [1008,1009,1010];
User::whereIn('users.id', $array)->get();
la source
Vous pouvez utiliser la clause array in where comme indiqué ci-dessous.
la source
la source
Selon ma suggestion si vous effectuez un filtrage ou une recherche
alors vous devriez aller avec:
la source
Utilisez ceci
la source
En utilisant Eloquent pur, implémentez-le ainsi. Ce code renvoie tous les utilisateurs connectés dont les comptes sont actifs.
$users = \App\User::where('status', 'active')->where('logged_in', true)->get();
la source
Un exemple de code.
D'abord :
le tableau est rempli ici en utilisant le nombre / boucle de conditions souhaité , de manière incrémentielle:
et ici:
et plus loin avec des éloquents comme:
la source
la source
la source