1blankz7 / php-object-query
在PHP中查询对象图
dev-master
2022-12-08 13:10 UTC
Requires
- symfony/property-access: ^v6.2
Requires (Dev)
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.7
This package is auto-updated.
Last update: 2024-09-08 17:10:15 UTC
README
此库允许您以一致的方式查询您的对象图。您可以使用它来支持对象映射,并根据外部系统的需求生成数据表示。
用法
Query
和 QueryResolver
是系统的两个关键组件。解析器需要一个或多个查询,并通过在给定的对象图上处理这些查询来解决这些查询。
<?php use Lemonade\ObjectQuery\Query\Query; use Lemonade\ObjectQuery\QueryResolver; use Lemonade\ObjectQuery\Definition\Path; $resolver = new QueryResolver( new Query('shipName', (new Path())->get('name')) ); $resolver->resolve($someShip); // ['shipName' => 'Millenium Falcon']
一个查询由一个名称组成,该名称最终成为结果中的键,以及一个定义。
系统中有三种主要定义可供您使用:Path
、Value
和 Composition
。
Value
Value
定义是一个简单的容器,它将返回给定的值。
<?php use Lemonade\ObjectQuery\Query\Query; use Lemonade\ObjectQuery\QueryResolver; use Lemonade\ObjectQuery\Definition\Value; $resolver = new QueryResolver( new Query('two', new Value(2)) ); $resolver->resolve($someObject); // ['two' => 2]
Composition
Composition
定义是 Value
的一个更灵活的替代品。它提供了对当前源访问的权限。
<?php use Lemonade\ObjectQuery\Query\Query; use Lemonade\ObjectQuery\QueryResolver; use Lemonade\ObjectQuery\Definition\Composition; use Lemonade\ObjectQuery\Source\ObjectSource; $composition = new Composition(function(ObjectSource $source) { return $source->get('id'); }); $resolver = new QueryResolver( new Query('someKey', $composition) ); $resolver->resolve($someObject); // ['someKey' => 3000]
Path
Path
是最复杂的定义。您可以深入遍历图,过滤集合并转换叶子。查看测试以了解可能性。
<?php use ObjectQuery\Query\Query; use ObjectQuery\QueryResolver; use ObjectQuery\Definition\Path; $path = (new Path())->get('appearsIn') ->filter(new EpisodeFilter(Episode::EMPIRE)) ->get('episode'); $resolver = new QueryResolver(new Query('episodes', $path)); $resolver->resolveArray($someObject); // ['episode' => [1, 2]]