我正在使用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 消息:“数组到字符串的转换”
答案 0 :(得分:1)
由于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] .'%');
}
});
答案 1 :(得分:0)
我改变了逻辑,对我有用,并返回正确的结果: 因为我正在从多个字段中搜索记录
$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 ."%");