[Laravel 扩展包]Filterable 包:在 Eloquent 模型中使用动态过滤器
Filterable 是 Jerome Thayananthajothy 开发的一个 Laravel 包,它通过可适配、可定制的过滤器和智能缓存增强 Laravel 查询,以提高性能和功能。
这个包打主要特性包括:
- 动态过滤:基于请求参数使用过滤器。
- 缓存:通过缓存查询结构提升性能。
- 用户指定过滤:轻松实现依赖于认证用户的过滤器。
- 自定义过滤方法:可继承该类添加自己的过滤方法。
定义 Filter 类是这个包的核心,你可以在其中创建可以将过滤应用于 Eloquent 查询的方法。该包内置一个 make:filter
Artisan 命令,用于在应用的 App\Filters
命名空间中生成过滤器。以下是包的 README 文件中的过滤器示例:
namespace App\Filters;
use Filterable\Filter;
use Illuminate\Database\Eloquent\Builder;
class PostFilter extends Filter
{
protected array $filters = ['status', 'category'];
protected function status(string $value): Builder
{
return $this->builder->where('status', $value);
}
protected function category(int $value): Builder
{
return $this->builder->where('category_id', $value);
}
}
给定一个 PostFilter
,你可以在具有 Post
模型的控制器中使用此类来基于 HTTP 查询参数过滤模型:
public function index(Request $request, PostFilter $filter)
{
// i.e., /posts?status=active&category_id=2
$query = Post::filter($filter);
$posts = $request->has('paginate')
? $query->paginate($request->query('per_page', 20))
: $query->get();
return response()->json($posts);
}
更多该包详情,请查看 Github 源码