Reputation: 604
i am using laravel 8 and want use like query with whereIn. it's my query:
$details = explode(" ", $request->detail);
$doctors->whereIn('specialities.title', 'like', '%' . $details . '%')
->orWhereIn('users.first_name','like',$details."%")
->orWhere('users.last_name','like',$details."%");
but i get errors:
{message: "Array to string conversion", exception: "ErrorException",…}
exception: "ErrorException" line: 39 message: "Array to string conversion"
Upvotes: 0
Views: 672
Reputation: 1246
You are getting the error because whereIn
expect two parameter one is column name and second one is the array
of data and in you case second parameter is like
which is a string.
You can do it like this:
$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] .'%');
}
});
Upvotes: 1
Reputation: 604
I changed my logic and it work for me and return correct result: because i am searching records from multiple fields
$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 ."%");
Upvotes: 1