1blankz7/php-object-query

在PHP中查询对象图

dev-master 2022-12-08 13:10 UTC

This package is auto-updated.

Last update: 2024-09-08 17:10:15 UTC


README

此库允许您以一致的方式查询您的对象图。您可以使用它来支持对象映射,并根据外部系统的需求生成数据表示。

用法

QueryQueryResolver 是系统的两个关键组件。解析器需要一个或多个查询,并通过在给定的对象图上处理这些查询来解决这些查询。

<?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']

一个查询由一个名称组成,该名称最终成为结果中的键,以及一个定义。

系统中有三种主要定义可供您使用:PathValueComposition

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]]