自己封装的公共获取数据的方法(支持按字段名查询,时间查询,分页,关联查询),只需一行代码

/**
     * 公告的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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 8

isset($post[$field_name]) ? $post[$field_name] : ' '; 可以写成 $post[$field_name] ?? '';

2个月前 评论
王大牛 (楼主) 2个月前
人艰不拆 2个月前

tucker-eric/eloquentfilter 可以看看这个轮子,学习一下实现方式。

2个月前 评论
王大牛 (楼主) 2个月前
aab

like 应该需要对里边的数据(%, _)进行转译吧

2个月前 评论
王大牛 (楼主) 2个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!