Laravel雄辩的哪里查询多个单词

时间:2019-02-22 15:25:41

标签: laravel

我有以下查询(为简便起见):

    $employees = Employee::where('first_name', 'LIKE', "%$query%")
                 ->orWhere('last_name', 'LIKE', "%$query%")

现在,当用户输入单个名称(如“ John”或“ Smith”)时,此方法有效,但是当他们输入“ John Smith”时,则找不到任何内容。我想念一个多余的东西吗?

3 个答案:

答案 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查找匹配的记录。