繁体   English   中英

如何在laravel中使用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] .'%');
         }      
    });

我改变了我的逻辑,它对我有用并返回正确的结果:因为我正在从多个字段中搜索记录

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM