Supposons maintenant que je reçoive le tableau de formulaires depuis le front-end :
$input = $request->input();
contient 4 valeurs : email, nom, âge, sexe. Désormais, la table de données doit être interrogée en fonction des valeurs saisies par l'utilisateur si l'utilisateur saisit l'e-mail et le nom. , la requête sera floue, si l'âge et le sexe sont saisis, une requête précise sera effectuée
Mais voici le problème. L'utilisateur peut remplir l'une de ces quatre entrées. , ou peut-être 4. Ensuite, lorsque j'utilise le constructeur de requête, il est impossible de juger si chaque valeur existe, puis d'écrire le constructeur. Après tout, la requête floue et la requête exacte sont écrites différemment, et par exemple, j'ai maintenant deux champs. (e-mail et nom) nécessitent une requête floue. Le constructeur de Laravel pour une requête floue s'écrit comme ceci :
->where('email', 'LIKE', $input['email'])
Ensuite, je dois déterminer si l'e-mail et le nom existent dans le programme, puis fusionner le constructeur de requête ?
L'idée est :
1.email存在,姓名不存在
->where('email', 'LIKE', $input['email'])
2.email不存在,姓名存在
->where('name', 'LIKE', $input['name'])
3.都存在
->where('email', 'LIKE', $input['email'])->->where('name', 'LIKE', $input['name'])
La quantité de code est trop importante. Si j'ai dix champs pour une requête floue, je ne peux pas du tout utiliser le constructeur.
Pouvez-vous me dire s'il existe un autre moyen, par exemple :
if($input['email']) $where['email'] = $input['email']
if($input['name']) $where['name'] = $input['name']
Utilisez ensuite :
->where( 'LIKE', $where), pour que j'inclue toutes les situations qui peuvent ou non exister sur une seule ligne
D'autres méthodes d'écriture sont recommandées sur Internet :
$where['email'] = ['j'aime', $input['email']], mais mon laravel5.1 ne peut pas être utilisé.
Avez-vous de bonnes méthodes pour résoudre les requêtes floues multi-conditions et les requêtes non floues ?
Laravel peut transmettre des fonctions anonymes où.
Vous pouvez juger dans cette fonction anonyme.
Par exemple, comme ça
De cette façon, vous pouvez porter des jugements appropriés sans détruire la structure du constructeur.
Je n'ai jamais utilisé 5.1, mais 5.4 a une méthode when, exemple :
Cela signifie que lorsque
sera exécutée.$name
n'est pas vide, la fonction suivanteVeuillez vérifier s'il existe une méthode similaire dans 5.1
En parlant du générateur de requêtes
where()
方法是返回$this
- vous pouvez donc les écrire successivement, mais cela ne dit pas que vous devez les écrire successivement !Quand il y a beaucoup de champs, est-il acceptable d'écrire une boucle for ? :
Vous devez porter un jugement, que vous rendiez le jugement ou que le cadre fasse le jugement. S'il y a 10 champs pour une requête floue, votre MySQL peut-il les gérer ? Utilisez simplement un moteur de recherche à la place ?