讨论数量:
我是在模型基类里封装了一些 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()
);
}
推荐文章: