如何在 laravel 中使用 like 和 whereIn
How to use like with whereIn in laravel
我正在使用 laravel 8 并希望在 whereIn 中使用类似查询。
这是我的查询:
$details = explode(" ", $request->detail);
$doctors->whereIn('specialities.title', 'like', '%' . $details . '%')
->orWhereIn('users.first_name','like',$details."%")
->orWhere('users.last_name','like',$details."%");
但我收到错误:
{消息:“数组到字符串的转换”,异常:“ErrorException”,…}
异常:“ErrorException”
行:39
消息:“数组到字符串的转换”
您收到错误是因为 whereIn
期望两个参数,一个是列名,第二个是数据的 array
,在您的情况下,第二个参数是 like
,这是一个字符串。
你可以这样做:
$details = explode(" ", $request->detail);
$doctors->where(function ($query) use($details) {
for ($i = 0; $i < count($details); $i++){
$query->orWhere('specialities.title', 'like', '%' . $details[$i] .'%');
}
})->orWhere(function ($query) use($details) {
for ($i = 0; $i < count($details); $i++){
$query->orWhere('users.first_name, 'like', '%' . $details[$i] .'%');
}
})->orWhere(function ($query) use($details) {
for ($i = 0; $i < count($details); $i++){
$query->orwhere('users.last_name', 'like', '%' . $details[$i] .'%');
}
});
我改变了我的逻辑,它对我有用并且 return 正确的结果:
因为我正在从多个字段中搜索记录
$details = explode(" ", $request->detail);
$doctors->where('specialities.title', 'like', '%' . $details[0]. '%')
->orWhere('users.first_name','like',count($details) > 1 ? $details[0] :
$request->detail ."%")
->orWhere('users.last_name','like',count($details) > 1 ? $details[1] :
$request->detail ."%");
我正在使用 laravel 8 并希望在 whereIn 中使用类似查询。 这是我的查询:
$details = explode(" ", $request->detail);
$doctors->whereIn('specialities.title', 'like', '%' . $details . '%')
->orWhereIn('users.first_name','like',$details."%")
->orWhere('users.last_name','like',$details."%");
但我收到错误:
{消息:“数组到字符串的转换”,异常:“ErrorException”,…}
异常:“ErrorException” 行:39 消息:“数组到字符串的转换”
您收到错误是因为 whereIn
期望两个参数,一个是列名,第二个是数据的 array
,在您的情况下,第二个参数是 like
,这是一个字符串。
你可以这样做:
$details = explode(" ", $request->detail);
$doctors->where(function ($query) use($details) {
for ($i = 0; $i < count($details); $i++){
$query->orWhere('specialities.title', 'like', '%' . $details[$i] .'%');
}
})->orWhere(function ($query) use($details) {
for ($i = 0; $i < count($details); $i++){
$query->orWhere('users.first_name, 'like', '%' . $details[$i] .'%');
}
})->orWhere(function ($query) use($details) {
for ($i = 0; $i < count($details); $i++){
$query->orwhere('users.last_name', 'like', '%' . $details[$i] .'%');
}
});
我改变了我的逻辑,它对我有用并且 return 正确的结果: 因为我正在从多个字段中搜索记录
$details = explode(" ", $request->detail);
$doctors->where('specialities.title', 'like', '%' . $details[0]. '%')
->orWhere('users.first_name','like',count($details) > 1 ? $details[0] :
$request->detail ."%")
->orWhere('users.last_name','like',count($details) > 1 ? $details[1] :
$request->detail ."%");