laraver 多字段,关联表,模糊查询

需求:

状态 (audit_status)到期时间(end_time1,end_time2)模糊查询(姓名,手机号,编号)

传入的数据

api_token:api_token
search:凯
audit_status:1
end_time1:2021-12-29 17:33:26
end_time2:2021-12-31 23:33:26
page:2
limit:10

控制器

        public function getVehicleList(){
            $param=$this->input;
            #所有需要查询的字段
            $timearr=["end_time1","end_time2","search","audit_status"];
			
            foreach ($timearr as $v){
                if (isset($this->input[$v])){
                	#如果时间存在无效时,返回错误信息
                    if (strstr($this->input[$v],'Invalid date')){
                        return $this->responseData([],"请请输入有效时间");
                    }
                }
                #如果前端没有传入字段信息,给他一个空值
                $param[$v]=isset($this->input[$v]) ? $this->input[$v] : "";
            }
            #进入service方法
            $data=$this->GarageManageService->getVehicleList($param);
            if (!$data){
                return $this->responseData();
            }
            return $this->responseData($data);

        }

service

public function getVehicleList($param)
    {
    
        #print_r($param);
        $field = ['*'];
		#使用model
        return CarManageCars::query()
        #在where 使用闭包方法查询 模糊查询(姓名,手机号,编号)
            ->where(function ($query) use ($param) {
                if ($param["search"]) {
                #查询编号
                    $query->where('car_no', $param["search"])
                    #orwhereHas ->使用关联其他模型实现不同字段的模糊搜索,user :关联的user 模型
                        ->orwhereHas('user', function ($query) use ($param) {
                        #查询手机号和名字
                            $query->where('realname', 'like', '%' . $param['search'] . '%')
                                ->orwhere('phone', 'like', '%' . $param['search'] . '%');
                        });
                }
            })
            ->where(function ($query) use ($param) {
            #查询状态
                if ($param['audit_status']) {
                    $query->orwhere('audit_status', $param['audit_status']);
                }
            })
            #通过区间时间查询
            ->where(function ($query) use ($param) {
                if ($param['end_time1'] && $param['end_time2']) {
                # orwhereBetween('数据库字段',['开始时间','结束时间'])
                    $query->orwhereBetween('expire_time', [$param['end_time1'], $param['end_time2']]);
                }
            })
            #排序方式
            ->orderBy('audit_status', 'asc')
            ->with(["user" => function ($query) {
                $query->select('id', 'realname', 'phone')->with('userHouses:user_id,gate_number,building_name');
            }])
            #laraver 自动进行分页
            ->paginate($this->limit, $field, 'page', $this->page)
            ->toArray();

    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值