infinityloop-dev / graphpinator-where-directives
用于在列表中过滤值的可执行指令。
v1.0.4
2023-11-10 19:48 UTC
Requires
Requires (Dev)
- infection/infection: ^0.27
- infinityloop-dev/coding-standard: ^0.2
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.4
README
⚡🌐⚡ 用于在列表中过滤值的可执行指令。
简介
此包允许客户端使用指令过滤列表值。过滤在服务器上执行,最常见的用例是在客户端确切知道需要哪些数据时节省带宽。
安装
使用 composer 安装包
composer require infinityloop-dev/graphpinator-where-directives
如何使用
⚠️ 这些指令并不替代由参数和底层技术提供的标准最优过滤。 这些指令仅作为补充。
⚠️ 这些指令是可执行指令。它们的调用是由客户端请求的。 在服务器上包含此功能之前请三思。
为了在您的服务器上启用 where 指令,您需要做的只是将选定的指令放入您的 Container
。您可以全部使用或只使用一些。
ListWhereDirective
对infinityloop-dev/graphpinator-constraint-directives
有特殊要求,如果您想使用@listWhere
,则需要首先启用它。
此包包含以下指令
\Graphpinator\WhereDirectives\StringWhereDirective
\Graphpinator\WhereDirectives\IntWhereDirective
\Graphpinator\WhereDirectives\FloatWhereDirective
\Graphpinator\WhereDirectives\BooleanWhereDirective
\Graphpinator\WhereDirectives\ListWhereDirective
指令选项
通用选项
所有指令都有三个通用参数
field
(String) - 此可选参数允许过滤嵌套结构。表示导航到过滤值的路径。- 有关更多信息,请访问以下 部分。
orNull
(Boolean) - 是否接受满足条件的 null 值(默认 false)。not
(Boolean) - 取消值条件的计算结果(默认 false)。
特定选项
@stringWhere
- equals
- contains
- startsWith
- endsWith
@intWhere
&@floatWhere
- equals
- greaterThan
- lessThan
@booleanWhere
- equals
@listWhere
- minItems
- maxItems
操作优先级
可以使用以下代码片段描述优先级
$conditionIsMet = $value === null ? $orNull : satisfiesSpecificConditions($value); $valueIsFilteredOut = $conditionIsMet === $not;
这意味着 not
参数具有最低优先级,甚至取消 orNull
参数。
字段参数
假设我们有一个包含一些字段的 BlogPost
对象列表。然后,为了接收所有博客文章,我们可以有一个这样的查询。
{ blogposts { title content likeCount author { name } } }
如果客户端只需要热门博客文章,即有超过 100 个赞,而服务器没有提供相关的过滤选项怎么办?
{ blogposts @intWhere(field: "likeCount", greaterThan: 100) { title content likeCount author { name } } }
如果客户端只需要名为 "Foo Bar" 的作者的帖子怎么办?
{ blogposts @stringWhere(field: "author.name", equals: "Foo Bar") { title content likeCount author { name } } }