How to use like with whereIn in laravel

536 views Asked by At

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"

2

There are 2 answers

1
Siraj Ali On BEST ANSWER

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 ."%");
2
Exterminator On

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] .'%');
         }      
    });