Laravel - Where 子句不起作用

Laravel - Where Clause not working

我正在尝试使用 laravel 构建搜索表单,但我无法使 where 子句起作用。

$term = $request->input('term');

$count = DB::table('members as m')
         ->where(DB::raw('m.member_first_name'), 'LIKE', "%$term%")
         ->orWhere(DB::raw('m.member_last_name'), 'LIKE', "%$term%")
         ->orWhere(DB::raw('m.member_business_address'), 'LIKE', "%$term%")
         ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_last_name')"), 'LIKE', "%$term%")
         ->orWhere(DB::raw("concat('m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%")
         ->orWhere(DB::raw("concat('m.member_name_affix',' ','m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%")
         ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_name_affix',' ','m.member_last_name')"), 'LIKE', "%$term%")
         ->count();

var_dump($count);



var_dump($count) 始终returns 所有数据库条目,无论搜索词是什么。


这是我的第一个 Laravel 项目,非常感谢您提供的任何帮助。

也许尝试将查询包含在一个整体中:

$count = DB::table('members as m')
         ->where(function ($q) {
            $q->where(DB::raw('m.member_first_name'), 'LIKE', "%$term%")
            ->orWhere(DB::raw('m.member_last_name'), 'LIKE', "%$term%")
            ->orWhere(DB::raw('m.member_business_address'), 'LIKE', "%$term%")
            ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_last_name')"), 'LIKE', "%$term%")
            ->orWhere(DB::raw("concat('m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%")
            ->orWhere(DB::raw("concat('m.member_name_affix',' ','m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%")
            ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_name_affix',' ','m.member_last_name')"), 'LIKE', "%$term%")
         })
         ->count();

您同时使用了/,这当然会失败。请尝试以下操作:

$count = DB::table('members as m')
     ->where(DB::raw('m.member_first_name'), 'LIKE', "%$term%")
     ->where(function ($query) {
            $query->where(DB::raw('m.member_last_name'), 'LIKE', "%$term%")
                ->orWhere(DB::raw('m.member_business_address'), 'LIKE', "%$term%"));
        })

只需尝试此代码,如果出现语法错误,请尝试在此处和此处更改 ' 符号..因为我无法在 post..[=15 之前对其进行测试=]

$term = "%".$request->input('term')."%";
$count = DB::table('members as m')
         ->where('m.member_first_name', 'LIKE', $term)
         ->orWhere('m.member_last_name', 'LIKE', $term)
         ->orWhere('m.member_business_address', 'LIKE', $term)
         ->orWhereRaw('(concat_ws(m.member_first_name,m.member_last_name) LIKE ? )',[$term])
         ->orWhereRaw('(concat_ws(m.member_last_name,m.member_first_name) LIKE ? )',[$term])
         ->orWhereRaw('(concat_ws(m.member_name_affix,m.member_last_name,m.member_first_name) LIKE ? )',[$term])
         ->orWhereRaw('(concat_ws(m.member_first_name,m.member_name_affix,m.member_last_name) LIKE ? )',[$term])
         ->count();

var_dump($count);

你可以使用 whereRaw() 不需要把 DB::raw() 放在 where().