dev-master
9999999-devQuering object graphs in PHP
MIT
The Requires
The Development Requires
Wallogit.com
2017 © Pedro Peláez
Quering object graphs in PHP
This library allows you to query your object graph in a consistent way. You can use it to support object mapping and to generate data representation based on the requirements of external systems., (*1)
Query and the QueryResolver are the two key components of the system. A resolver needs one or more queries and
resolves these queries by processing them on a given object graph., (*2)
<?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']
A query consists of a name which ends up being the key in the result and a definition., (*3)
There are three main definitions in the system you can use. Path, Value and Composition., (*4)
The Value definition is a plain container which will return the given value., (*5)
<?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]
The Composition definition is a more flexible alternative to Value. It gives access to the current source., (*6)
<?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 is the most complex definition. You can deep walk into the graph, filter collections and transform leaves. Have a
look into the tests to get an impression of the possibilities., (*7)
<?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]]
Quering object graphs in PHP
MIT