告别混乱!如何用LaravelPurity优雅地实现数据过滤与排序

花韻仙語
发布: 2025-11-04 11:11:01
原创
797人浏览过

告别混乱!如何用laravelpurity优雅地实现数据过滤与排序

可以通过一下地址学习composer学习地址

你的 Laravel 项目是否也曾被“过滤与排序”的泥潭困扰?

作为 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 查询的过滤和排序,而你只需要在后端做最少量的配置。

如何让你的 Laravel 查询瞬间“优雅”起来?

首先,我们通过 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 模型查询就具备了强大的过滤和排序能力!

SpeakingPass-打造你的专属雅思口语语料
SpeakingPass-打造你的专属雅思口语语料

使用chatGPT帮你快速备考雅思口语,提升分数

SpeakingPass-打造你的专属雅思口语语料 25
查看详情 SpeakingPass-打造你的专属雅思口语语料

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中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号