我有以下查询(为简便起见):
$employees = Employee::where('first_name', 'LIKE', "%$query%")
->orWhere('last_name', 'LIKE', "%$query%")
现在,当用户输入单个名称(如“ John”或“ Smith”)时,此方法有效,但是当他们输入“ John Smith”时,则找不到任何内容。我想念一个多余的东西吗?
答案 0 :(得分:2)
尝试一下:
Employee::where(DB::raw('CONCAT(first_name," ",lastname)'), 'LIKE', "%' . $query . '%"))
答案 1 :(得分:1)
您将必须添加第三个orWhere
。对于我们的搜索功能,我们使用如下代码:
Employee::whereraw("COALESCE(last_name, '') LIKE '%$query%'")
->Orwhereraw("COALESCE(first_name, '') LIKE '%$query%'")
->Orwhereraw("COALESCE(last_name + ', ' + first_name, '') LIKE '%$query%'")
添加Coalesce似乎有助于解决我们初次实施时遇到的一些问题,尽管不确定您的情况是否必要。
答案 2 :(得分:1)
您可以:
$ fullName = trim($ query);
$employees = Employee::where(DB::raw("CONCAT(first_name, ' ', last_name)"), 'LIKE', "%".$fullName."%")->get();
您正在为first_name + ' ' + last_name
连接数据库中的值,然后使用like查找匹配的记录。