自己封裝的公共獲取資料的方法(支援按欄位名查詢,時間查詢,分頁,關聯查詢),只需一行程式碼

wzx2002發表於2021-11-18
/**
     * 公告的where
     * @param $admin
     * @param string $like 查詢的欄位
     * @param string $name 值
     * @return array
     */
    public function commonWhere($admin, $like = '', $name = '')
    {
        $where = [];
        if (isset($name) && !empty($name)) {
            $where[] = [$like, 'like', '%' . $name . '%'];
        }
        return $where;
    }
/**
     * 判斷時間並返回
     * @param $data
     * @return array
     */
    public function timeStr($data)
    {
        return [
            'start' => isset($data['start']) ? $data['start'] . ' ' . '00:00:00' : '0000-00-00 00:00:00',
            'end' => isset($data['end']) ? $data['end'] . ' ' . '23:59:59' : date('Y-m-d H:i:s')
        ];
    }
/**
     * @param $model 查詢的模型
     * @param $post 資料
     * @param $field_name 要查詢的欄位名
     * @param $del 是否軟刪除,傳軟刪除欄位例如:admin_is_del
     * @param $add_time 新增時間
     * @param bool $isOtherModel 是否關聯其他模型
     * @param array $models 傳入要關聯的模型
     * @return string | array
     * @throws \Exception
     */
    public function commonIndex($model, $post, $field_name, $del, $add_time, $isOtherModel = false, $models = [])
    {

        $admin = $this->getThisAdmin($post['token']);
        // where條件
        $post[$field_name] = isset($post[$field_name]) ? $post[$field_name] : '';

        $where = $this->commonWhere($admin, $field_name, $post[$field_name]);

        // 獲取時間
        $date = $this->timeStr($post);
       // 當前頁
        $post['page'] = isset($post['page']) ? $post['page'] : 1;
       // 是否查詢所有資料
        $post['is_all'] = isset($post['is_all']) ? $post['is_all'] : 0;
      // 指定每頁條數
        $post['nums'] = isset($post['nums']) ? $post['nums'] : 15;
        if ($isOtherModel) { // 關聯模型
            if (empty($models)) {
                throw new \Exception('異常操作');
            }
            if($post['is_all']) {
                $data = $model->with($models)
                    ->whereBetween($add_time, [$date['start'], $date['end']])
                    ->where($where)
                    ->get()
                    ->toArray();
                $arr['data'] = $data;
            }else{
                $arr = $model->with($models)
                    ->whereBetween($add_time, [$date['start'], $date['end']])
                    ->where($where)
                    ->paginate($post['nums'],['*'],$post['page'],$post['page'])
                    ->toArray();
                if (empty($arr['data'])) {
                    return '暫無資料';
                }
            }
        } else {
            if($post['is_all']) {
                $data = $model
                    ->whereBetween($add_time, [$date['start'], $date['end']])
                    ->where($where)
                    ->get()
                    ->toArray();
                $arr['data'] = $data;
            }else{
                $arr = $model
                    ->whereBetween($add_time, [$date['start'], $date['end']])
                    ->where($where)
                    ->paginate($post['nums'],['*'],$post['page'],$post['page'])
                    ->toArray();
                if (empty($arr['data'])) {
                    return '暫無資料';
                }
            }
        }

        return $arr;
    }

示例

public function index(array $post)
    {
        return $this->commonIndex($this->model, $post, 'xxxx', 'xxxx', 'xxxx');
    }

還可以優化,本人比較懶,就懶得了

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章