如何在Laravel中与whereIn一起使用

时间:2020-09-29 07:47:50

标签: php laravel-5.8

我正在使用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 消息:“数组到字符串的转换”

2 个答案:

答案 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 ."%");