Supposons maintenant que je re?oive le tableau de formulaires depuis le front-end?:
$input = $request->input();
contient 4 valeurs?: email, nom, age, 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'age 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 ?
ringa_lee
Laravel peut transmettre des fonctions anonymes où.
Vous pouvez juger dans cette fonction anonyme.
Par exemple, comme ?a
where(function ($query) use ($request) {
$request->input('email') && $query->where('email', $request->input('email'));
$request->input('name') && $query->where('name', $request->input('name'));
})
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 :
$query->when($name, function($query) use ($name){
$query->where('name', 'like', '%' . $name . '%');
});
Cela signifie que lorsque $name
n'est pas vide, la fonction suivante
Veuillez vérifier s'il existe une méthode similaire dans 5.1
En parlant du générateur de requêteswhere()
方法是返回$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???:
$query = XXXModel::query();
for ($field in ['name', 'email', "... 你相加什么字段加什么字段"]){
if ($fieldValue = $request->input($field)){
$query->where($field, 'LIKE', "%$fieldValue%");
}
}
// 繼續(xù)添加where條件,或者查詢數(shù)據(jù)...
$query = DB::table($table_name);
foreach ($conditions as $condition) {
$query->where($condition, 'LIKE' $input($ocndition);
}
$query->get();
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??