laravel怎么优雅的拼接where,处理whereIn与where数组查询的问题

现在我要处理多条件搜索的问题

https://img2.mukewang.com/5c8f6c6a00017b8e08000119.jpg

我的代码是这么处理的

  switch ($where['type']) {
                //基层医院姓名
                case 1:
                    $condition [] = ['create_doctor_hospital', 'like', $where['name'] . "%"];
                    break;
                //基层医生姓名
                case 2:
                    $condition [] = ['create_doctor_name', 'like', $where['name'] . "%"];
                    break;
                //上级医生姓名
                case 3:
                    $doctor_model=UserModel::select('doctoruid')
                        ->where('doctorname', 'like', $where['name'] . "%")
                        ->get('doctoruid');
                    //todo:会存在匹配到多个叫刘江淮的医生 结果集要怎么处理
                    if(empty($doctor_model)){
                        break;
                    }else{
                        foreach ($doctor_model as $doc){
                            $check_doctor_id[]=$doc->doctoruid;
                        }
                    }
                    $condition[] =['check_doctor_uid','in',$check_doctor_id];
                    break;
            }
        }


       if (isset($where['start_time']) && isset($where['end_time'])) {
            $order_data = $this
                ->join(HDW_CHECKREPORT_ECG, $this->table . '.', '=', HDW_CHECKREPORT_ECG . '.id')
                ->select(HDW_CHECKREPORT_ECG . '.check_time', HDW_CHECKREPORT_ECG . '.patient_name', HDW_CHECKREPORT_ECG . '.patient_mobile', HDW_CHECKREPORT_ECG . '.patient_idcard', $this->table . '.orderid', $this->table . '.pay_money')
                ->whereBetween(HDW_ORDER . '.created_at', [$where['start_time'], $where['end_time'] + 24 * 60 * 60])
                ->where($condition)
                ->get();
        } else {
            //todo:sql待测试
            $order_data = $this
                ->join('doctor_user', $this->table . '.check_doctor_uid', '=', 'doctor_user.doctoruid')
                ->join(HDW_PRODUCT, $this->table . '.product_id', '=', HDW_PRODUCT . '.productid')
                ->select($this->table . '.orderid', $this->table . '.patient_name', $this->table . '.product_id', $this->table . '.create_doctor_uid', $this->table . '.pay_money', $this->table . '.create_doctor_hospital', $this->table . '.check_doctor_uid', $this->table . '.create_doctor_name', 'doctor_user.doctorname', HDW_PRODUCT . '.name')
                ->where($condition)
                ->get();
        }
        
       由于前几个条件都是拼接数组 作为where条件传入的 在搜索上级医生的时候 由于会匹配到多个医生 所以需要使用到wherein   但是不知道怎么去拼接whereIn  或者  作为数组传进去  求sg大神解惑
噜噜哒
浏览 5246回答 4
4回答

萧十郎

多谢了 明白了
打开App,查看更多内容
随时随地看视频慕课网APP