我正在使用此查询:
public function autocomplete(Request $request)
{
$company_name = $request->input('query');
$data = BusinessUser::where("company_name","LIKE",'%'. $company_name .'%')->pluck('company_name');
return response()->json($data);
}
在公司名称的数据库中,我可以这样:'测试','测试','测试'。 那么如何检查所有这些以便我得到结果。有什么建议吗?
我尝试了这个,但后来我得到一个错误,我需要传递数组:
$data = BusinessUser::whereRaw("company_name","LIKE",'%'. $company_name .'%')->orWhereRaw("company_name","LIKE",'%'. $company_name .'%')->pluck('company_name');
编辑:
我不想改变数据库中的任何内容
答案 0 :(得分:5)
您可以使用LOWER
:
BusinessUser::whereRaw('LOWER(`company_name`) like ?', ['%'.strtolower($company_name).'%'])->pluck('company_name');
答案 1 :(得分:0)
将company_name
的编码设置为utf8_general_ci
。 CI
表示不区分大小写。
答案 2 :(得分:0)
您的查询应如下所示:
$data = BusinessUser::whereRaw("company_name COLLATE UTF8_GENERAL_CI LIKE %{$company_name}%")->pluck('company_name');
答案 3 :(得分:0)
这是不使用 whereRaw
的答案:
use DB;
$data = BusinessUser::where(DB::raw('LOWER(company_name)'), 'like', '%' . strtolower($company_name) . '%');