
可以通过一下地址学习composer:学习地址
你的 Laravel 项目是否也曾被“过滤与排序”的泥潭困扰?
作为 Laravel 开发者,你是否曾遇到这样的场景:老板或产品经理突然提出需求,要在某个数据列表页增加各种筛选条件,比如按标题搜索、按状态过滤、按日期范围筛选,甚至还要支持多种排序方式?
一开始,你可能信心满满地在控制器里写下了一系列 if (request()->has('param')) { $query->where(...) } 的代码。然而,随着过滤和排序条件的增多,你的控制器变得越来越臃肿,充斥着大量的条件判断和查询作用域。更糟糕的是,这些逻辑在不同的地方可能还会重复出现,维护起来简直是一场噩梦!
// 假设你有一个 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 查询的过滤和排序,而你只需要在后端做最少量的配置。如何让你的 Laravel 查询瞬间“优雅”起来?
首先,我们通过 Composer 来安装这个强大的工具:
composer require abbasudo/laravel-purity安装完成后,接下来就是见证奇迹的时刻!
1. 启用过滤与排序
你只需要在你的 Eloquent 查询中简单地链式调用
filter()和sort()方法:// app/Http/Controllers/PostController.phpuse AppModelsPost;use IlluminateHttpRequest;class PostController extends Controller{ public function index(Request $request) { $posts = Post::filter() // 启用过滤功能 ->sort() // 启用排序功能 ->paginate(15); return view('posts.index', compact('posts')); }}是的,你没看错,仅仅是
filter()和sort()两个方法,你的Post模型查询就具备了强大的过滤和排序能力!
SpeakingPass-打造你的专属雅思口语语料
使用chatGPT帮你快速备考雅思口语,提升分数
25 查看详情
![]()
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等),几乎可以满足你所有的过滤需求。你甚至可以在模型中定义允许过滤和排序的字段,以增加安全性。为什么选择 Laravel Purity?
代码简洁优雅: 告别臃肿的控制器,你的业务逻辑将更加清晰。开发效率倍增: 无需为每个过滤/排序条件手写代码,大大节省开发时间。灵活强大: 支持多种过滤操作符和排序方式,满足复杂需求。前端友好: 通过标准 URL 参数即可控制数据,前后端协作更顺畅。易于维护: 过滤和排序逻辑集中管理,便于未来的扩展和修改。
总结
abbasudo/laravel-purity是一个真正能解决实际痛点、提升开发体验的 Laravel 包。它将复杂的查询逻辑抽象化,通过优雅的 API 暴露给开发者,让数据过滤和排序不再是令人头疼的任务。如果你还在为 Laravel 项目中的数据列表筛选和排序功能而挣扎,那么我强烈推荐你尝试一下Laravel Purity,它一定会让你的开发工作变得更加轻松愉快!去吧,让你的 Laravel 项目变得更加纯粹和优雅!
以上就是告别混乱!如何用LaravelPurity优雅地实现数据过滤与排序的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/318030.html
微信扫一扫
支付宝扫一扫