[扩展推荐] 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

Practice makes perfect.

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

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

本帖已被设为精华帖!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 1

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

10个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会