Laravel 链表查询多条件检索

public function contractList()
    {
        if (!Auth::guard('admin')->user()->can('admin_yun_user_contract_list', YunUserBorrow::class)) {
            return BaseController::hasPower('list');
        }

        $limit = (int)Input::get('limit', 15);
        //查询条件
        $name = Input::get('name');
        $created_at = Input::get('created_at');
        $work_no = Input::get('work_no');
        $status = Input::get('status');
        $id_no = Input::get('id_no');
        //拆解一行一个止
        //名字拆分
        if ($name) {
            $name_arr = array_unique(preg_split('/s+/', $name));
        } else {
            $name_arr = [];
        }

        if ($work_no) {
            $work_no_arr = array_unique(preg_split('/s+/', $work_no));
        } else {
            $work_no_arr = [];
        }

        if ($id_no) {
            $id_no_arr = array_unique(preg_split('/s+/', $id_no));
        } else {
            $id_no_arr = [];
        }

        $list = ESignLog::leftjoin('yun_user_entry', 'yun_user_entry.id', '=', 'e_sign_logs.user_id')
            ->select('e_sign_logs.*', 'yun_user_entry.name', 'yun_user_entry.work_no')
            ->when($name_arr, function ($query) use ($name_arr) {
                return $query->whereIn('yun_user_entry.name', $name_arr);
            })->when($work_no_arr, function ($query) use ($work_no_arr) {
                return $query->whereIn('yun_user_entry.work_no', $work_no_arr);
            })->when($id_no_arr, function ($query) use ($id_no_arr) {
                return $query->whereIn('yun_user_entry.id_no', $id_no_arr);
            })
            ->when(isset($status), function ($query) use ($status) {
                $query->where('e_sign_logs.status', $status);
            })
            ->when($created_at, function ($query) use ($created_at) {
                $created_at_time = explode('至', $created_at);
                $start_day = $created_at_time[0];
                $end_day = $created_at_time[1] . ' 23:59:59';
                $query->where('e_sign_logs.created_at', '>=', $start_day);
                $query->where('e_sign_logs.created_at', '<=', $end_day);
            })
            ->orderBy('id', 'desc')
            ->paginate($limit);

        if ($list) {
            $list = $list->toArray();
            foreach ($list['data'] as $key => $val) {
                $list['data'][$key]['dst_file_path'] = asset($val['dst_file_path']);
            }
        }

        return Response::json($list);
    }
原文地址:https://www.cnblogs.com/sgm4231/p/13297152.html