[扩展推荐] Laravel Query Builder 让你的 API 支持动态参数,如 filter,include,sort

file

Laravel Query Builder 是由 Spatie 机构一员的 Alex Vanderbist 开发的扩展,用于从 API 请求中快速构建 Eloquent 查询。这个扩展使得 Laravel 构建复杂的 API 查询变得非常简单。虽然你或许已经听过这个扩展(或者已经使用过它),但我还是想确保每个人都知道它!

我强烈建议你使用 Query Builder 作为中转,并通过阅读 README 来了解它能做什么。它使得构建 API 过滤器和其他的相关查询任务变得非常容易,你会体验到像作弊一样的爽快。

你可以做一些基本的示例,包括过滤 API 请求,包括关联模型,将其与现有查询结合起来,对 API 请求进行排序等。

比如,使用这个请求 /users?filter[name]=John,下面是如何在 users 表中的 name 字段使用过滤:

use Spatie\QueryBuilder\QueryBuilder;

// ...

$users = QueryBuilder::for(User::class)
    ->allowedFilters('name')
    ->get();
// 所有姓名中包含字符串「John」的 `User` 集合

如果你有一个已经存在的查询,则可以将其传递给查询构造器:

$query = User::where('active', true);

$user = QueryBuilder::for($query)
    ->allowedIncludes('posts', 'permissions')
    ->where('score', '>', 42) // 可以连接 Laravel 中任何查询构造器的方法
    ->first();

一个更高级的用法,也是扩展中我最喜欢的功能之一是作用域过滤器。假设你有以下作用域:

public function scopeStartsBefore(Builder $query, $date): Builder
{
    return $query->where('starts_at', '>=', Carbon::parse($date));
}

相关的查询构造器可能看起来是这样:

QueryBuilder::for(Event::class)
    ->allowedFilters([
        Filter::scope('starts_before'),
    ])
    ->get();

使用上面的查询构造器,现在可以进行以下查询来过滤结果中的 starts_before 字段,如下所示:

GET /events?filter[starts_before]=2018-01-01

更多

你可以在 GitHub  spatie/laravel-query-builder 上获取源码,阅读有关安装和使用的文档。 本文的示例来自 Laravel Query Builder 的自述文件, 我建议你仔细阅读本篇文章以获取更多信息。

在 Laravel 5 中,你可以使用下面的 composer 命令来安装此包:

composer require spatie/laravel-query-builder
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/laravel-query-b...

译文地址:https://learnku.com/laravel/t/14810/exte...

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 1

前端搭配 robsontenorio/vue-api-query 使用更佳

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!