【发布时间】:2017-08-20 06:11:13
【问题描述】:
我一直在尝试在 Laravel 中进行查询,在原始 SQL 中会是这样的
"SELECT * FROM students WHERE (((students.user_id)=$id) AND (((students.name) Like '%$q%') OR ((students.last_name) Like '%$q%') OR ((students.email) Like '%$q%')))")
我关注了这个帖子 (Eloquent WHERE LIKE clause with multiple columns),它运行良好,但只有两列 Ej:
$students = student::where(user_id, Auth::id())
->whereRaw('concat(name," ",last_name) like ?', "%{$q}%")
->paginate(9);
但如果我添加多于两列,则结果变量始终为空,无论变量 $q 中的内容是否与一列或多列匹配:
$students = student::where(user_id, Auth::id())
->whereRaw('concat(name," ",last_name," ",email) like ?', "%{$q}%")
->paginate(9)
我很确定我错过了一些东西,但我找不到它是什么。提前致谢。
【问题讨论】:
-
如果任何字段为空,Concat 将返回空。这不是问题吗?考虑到它与 2 一起使用,第三个字段是可疑字段...
-
好的,这就是问题所在,但我该如何解决,因为我允许人们存储电子邮件但不是强制性的,但这意味着通过简单的搜索过滤表格,所以我想要它过滤考虑到所有列,也就是说,如果其中之一为 null,则不要将所有其他列转换为 null
-
使用
concat_ws而不是concat可以帮助正确处理NULL。但 mbozwood 的回答对我来说似乎更雄辩友好。