nadlambino / laravel-query-builder
这是对 spatie/laravel-query-builder 的分支,但将构建器与请求解耦。
Requires
- php: ^8.2
- illuminate/database: ^10.0|^11.0
- illuminate/http: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.11
Requires (Dev)
- ext-json: *
- mockery/mockery: ^1.4
- nunomaduro/larastan: ^2.0
- orchestra/testbench: ^7.0|^8.0
- pestphp/pest: ^2.0
- phpunit/phpunit: ^10.0
- spatie/invade: ^2.0
README
目标是让 QueryBuilder
类不与请求对象紧密耦合。该包应在 API 请求之外的环境中也能使用,写一个既可以在 API 中使用,也可以在任何其他部分的过滤器不是来自请求的应用程序中使用。
有哪些更改?
- 首先,将包命名空间更改为避免与
spatie/laravel-query-builder
冲突和混淆。 - 将
QueryBuilderRequest
重命名为RequestSource
并将其移动到sources
目录。由于移动到新位置,命名空间也进行了更改。 - 创建了一个
CollectionSource
,它通过Source
特性共享与RequestSource
相同的方法。唯一的区别是getData
(以前是getRequestData
)的实现。 - 现在可以通过源类更改分隔符。以前,可以通过
QueryBuilderRequest
来实现。
/** Previously */ QueryBuilderRequest::setFilterArrayValueDelimiter('|'); /** Now, when using the request as the source */ RequestSource::setFilterArrayValueDelimiter('|'); /** Or when using the array/collection as the source */ CollectionSource::setFilterArrayValueDelimiter('|');
从 API 请求构建 Eloquent 查询
此包允许您根据请求过滤、排序和包含 Eloquent 关系。此包中使用的 QueryBuilder
扩展了 Laravel 的默认 Eloquent 构建器。这意味着您仍然可以使用所有您喜欢的 方法和宏。查询参数名称尽可能遵循 JSON API 规范。
基本用法
基于请求过滤查询:/users?filter[name]=John
use Spatie\QueryBuilder\QueryBuilder; $users = QueryBuilder::for(User::class) ->allowedFilters('name') ->get(); // all `User`s that contain the string "John" in their name
了解更多关于过滤功能,如:部分过滤、精确过滤、作用域过滤、自定义过滤、忽略值、默认过滤值等。
基于请求包含关系:/users?include=posts
$users = QueryBuilder::for(User::class) ->allowedIncludes('posts') ->get(); // all `User`s with their `posts` loaded
了解更多关于包含功能,如:包含嵌套关系、包含关系计数、自定义包含等。
基于请求排序查询:/users?sort=id
$users = QueryBuilder::for(User::class) ->allowedSorts('id') ->get(); // all `User`s sorted by ascending id
与现有查询配合良好
$query = User::where('active', true); $userQuery = QueryBuilder::for($query) // start from an existing Builder instance ->withTrashed() // use your existing scopes ->allowedIncludes('posts', 'permissions') ->where('score', '>', 42); // chain on any of Laravel's query builder methods
为查询选择字段:/users?fields[users]=id,email
$users = QueryBuilder::for(User::class) ->allowedFields(['id', 'email']) ->get(); // the fetched `User`s will only have their id & email set
支持我们
我们在创建 一流的开放源代码包 上投入了大量资源。您可以通过 购买我们的付费产品之一 来支持我们。
我们非常感谢您从您家乡给我们寄来明信片,说明您正在使用我们哪个包。您可以在 我们的联系页面 找到我们的地址。我们将把收到的所有明信片发布在 我们的虚拟明信片墙上。
安装
您可以通过 composer 安装此包。
composer require spatie/laravel-query-builder
在文档网站上阅读安装说明: https://spatie.be/docs/laravel-query-builder/v5/installation-setup。
文档
您可以在 https://spatie.be/docs/laravel-query-builder/v5 找到文档。
在使用此包时遇到困难?发现了错误?您有一般性问题或对改进媒体库的建议?请随时在 GitHub 上创建一个问题,我们将尽快解决。
如果您发现与安全相关的错误,请通过电子邮件发送至 security@spatie.be,而不是使用问题跟踪器。
升级
有关详细信息,请参阅 UPGRADING.md。
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
请参阅 CONTRIBUTING 获取详细信息。
安全性
如果您发现与安全相关的错误,请通过电子邮件发送至 security@spatie.be,而不是使用问题跟踪器。
鸣谢
许可协议
MIT 许可协议 (MIT)。有关更多信息,请参阅 许可文件。