
作为 Laravel 开发者,你是否曾遇到这样的场景:老板或产品经理突然提出需求,要在某个数据列表页增加各种筛选条件,比如按标题搜索、按状态过滤、按日期范围筛选,甚至还要支持多种排序方式?
一开始,你可能信心满满地在控制器里写下了一系列 if (request()->has('param')) { $query->where(...) } 的代码。然而,随着过滤和排序条件的增多,你的控制器变得越来越臃肿,充斥着大量的条件判断和查询作用域。更糟糕的是,这些逻辑在不同的地方可能还会重复出现,维护起来简直是一场噩梦!
<pre class="brush:php;toolbar:false;">// 假设你有一个 Post 模型,你需要根据用户请求来过滤和排序
public function index()
{
$query = Post::query();
// 筛选逻辑开始变得复杂...
if (request()->has('title')) {
$query->where('title', 'like', '%' . request('title') . '%');
}
if (request()->has('status')) {
$query->where('status', request('status'));
}
if (request()->has('category_id')) {
$query->where('category_id', request('category_id'));
}
// 排序逻辑也来了...
if (request()->has('sort_by') && request()->has('sort_order')) {
$query->orderBy(request('sort_by'), request('sort_order'));
} else {
$query->latest();
}
// ... 更多条件,更多痛苦
$posts = $query->paginate(15);
return view('posts.index', compact('posts'));
}这种代码不仅可读性差,而且每增加一个过滤或排序字段,你都得手动修改控制器,这无疑大大降低了开发效率。有没有一种更优雅、更简洁的方式来处理这些常见的需求呢?
abbasudo/laravel-purity 登场!答案是肯定的!今天,我要向大家介绍一个我个人非常喜欢,并且极大提升了我开发效率的 Laravel 包:abbasudo/laravel-purity。正如其名,它为 Laravel 的查询提供了“纯粹”且“优雅”的过滤和排序能力,让你彻底从上述的泥潭中解脱出来。
Laravel Purity 的核心理念是:让前端通过 URL 查询参数来直接驱动后端 Eloquent 查询的过滤和排序,而你只需要在后端做最少量的配置。
首先,我们通过 Composer 来安装这个强大的工具:
<code class="bash">composer require abbasudo/laravel-purity</code>
安装完成后,接下来就是见证奇迹的时刻!
1. 启用过滤与排序
你只需要在你的 Eloquent 查询中简单地链式调用 filter() 和 sort() 方法:
<pre class="brush:php;toolbar:false;">// app/Http/Controllers/PostController.php
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index(Request $request)
{
$posts = Post::filter() // 启用过滤功能
->sort() // 启用排序功能
->paginate(15);
return view('posts.index', compact('posts'));
}
}是的,你没看错,仅仅是 filter() 和 sort() 两个方法,你的 Post 模型查询就具备了强大的过滤和排序能力!
2. 前端如何使用?
现在,前端开发者可以通过 URL 查询参数来控制数据的筛选和排序了,而且语法非常直观:
过滤示例:
按标题包含特定字符串:GET /api/posts?filters[title][$contains]=Purity
这会查询所有标题中包含 "Purity" 的文章。
按状态精确匹配:GET /api/posts?filters[status]=published
这会查询所有状态为 "published" 的文章。
按创建日期在某个范围:GET /api/posts?filters[created_at][$gte]=2023-01-01&filters[created_at][$lte]=2023-12-31
这会查询所有在 2023 年创建的文章。
排序示例:
按创建时间倒序(最新优先):GET /api/posts?sort=-created_at
按标题正序:GET /api/posts?sort=title
Laravel Purity 支持多种操作符(如 $contains, $eq, $gt, $lt, $gte, $lte, $in 等),几乎可以满足你所有的过滤需求。你甚至可以在模型中定义允许过滤和排序的字段,以增加安全性。
abbasudo/laravel-purity 是一个真正能解决实际痛点、提升开发体验的 Laravel 包。它将复杂的查询逻辑抽象化,通过优雅的 API 暴露给开发者,让数据过滤和排序不再是令人头疼的任务。如果你还在为 Laravel 项目中的数据列表筛选和排序功能而挣扎,那么我强烈推荐你尝试一下 Laravel Purity,它一定会让你的开发工作变得更加轻松愉快!
去吧,让你的 Laravel 项目变得更加纯粹和优雅!
以上就是告别混乱!如何用LaravelPurity优雅地实现数据过滤与排序的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号