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

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

Practice makes perfect.

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

译文地址:https://laravel-china.org/topics/14810/e...

本帖已被设为精华帖!
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 1
sinofaneliu

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

4个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!