我有十几个筛选咋来优雅的进行编写

我现在筛选是放在controller里面进行判断拼接的,咋我想问下大家是咋弄的有没有更加优雅的方式,有一部分需要join来筛选,和一部分需要设置筛选 列的名称,大家有没有啥更加好的方式,我参考借鉴一下

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5
nff93

我是在模型基类里封装了一些 filter,比如:

public function scopeEqFilter(Builder $q, array $fields, array $filters) {
    foreach ($fields as $field) {
        if (filled($filters[$field] ?? null)) {
            is_array($filters[$field] ? $q->whereIn($field, $filters[$field]) : $q->where($field, $filters[$field]);
        }
    }
}

public function scopeLikeFilter(Builder $q, array $fields, array $filters) {
    foreach ($fields as $field) {
        if (filled($filters[$field] ?? null)) {
            $q->where($field,  'like', '%' . $filters[$field] . '%');
        }
    }
}

// more

然后在具体的模型里封装一个 filter

public function scopeFilter(Builder $q, array $filters) {
    $q->eqFilter(['id', 'email'], $filters);
    $q->likeFilter(['title', 'content'], $filters);
    // more
}

然后控制器:

function index(Request $request) {
    return PostResource::collection(
        Post::filter($request->all())->paginate()
    );
}
11个月前 评论
11个月前 评论
Imuyu 11个月前

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