我有以下查询(简短剪切):
$employees = Employee::where('first_name', 'LIKE', "%$query%")
->orWhere('last_name', 'LIKE', "%$query%")
现在,当用户输入诸如" John"或" Smith"之类的单个名称时,这起作用了,但是当他们输入" John Smith"时,它找不到任何东西。我想念一个额外的地方吗?
尝试以下:
Employee::where(DB::raw('CONCAT(first_name," ",lastname)'), 'LIKE', "%' . $query . '%"))
您必须添加第三orWhere
。对于我们的搜索功能,我们使用类似的东西:
Employee::whereraw("COALESCE(last_name, '') LIKE '%$query%'")
->Orwhereraw("COALESCE(first_name, '') LIKE '%$query%'")
->Orwhereraw("COALESCE(last_name + ', ' + first_name, '') LIKE '%$query%'")
添加Cocece似乎有助于解决我们第一次实施时遇到的一些问题,但是在您的情况下是否有必要。
您可以做:
$ fullname = trim($ query);
$employees = Employee::where(DB::raw("CONCAT(first_name, ' ', last_name)"), 'LIKE', "%".$fullName."%")->get();
您是在 first_name + ' ' + last_name
的数据库中加入值,然后使用喜欢查找匹配记录。