假如现在我接收到前端传来的表单数组:
$input = $request->input();
里面包含4个值:email,姓名,年龄,性别.现在需要根据用户输入的值进行数据表的查询,如果用户输入了email和姓名,则进行模糊查询,如果输入了年龄和性别,则进行准确查询.
可是问题来了,这4个input,用户可能填写一个,也可能填写4个,那我使用查询构造器的时候,不可能判断每个值是否存在,然后写构造器吧,毕竟模糊查询跟准确查询的写法不同,而且比如现在我有两个字段(email和姓名)是需要模糊查询的,laravel进行模糊查询的构造器是这样写的:
->where('email', 'LIKE', $input['email'])
那我必须在程序中判断email和姓名是否存在的情况,然后来拼接查询构造器吗?
这个思路是:
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'])
这些的代码量也太大了,如果我有十个字段模糊查询,那根本无法使用构造器了.
请问大家是不是有一种其他的方式,比如:
if($input['email']) $where['email'] = $input['email']
if($input['name']) $where['name'] = $input['name']
然后使用:
->where( 'LIKE', $where),这样我一行就包括了所有可能存在也可能不存在的情况,
网上推荐过其他写法:
$where['email'] = ['like', $input['email']],但是我的laravel5.1并不能用.
请问大家有什么好的方法解决多条件模糊查询和非模糊查询吗?
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 ?