gnugat / query-bus
A PHP library for Interrogatory Messages.
Requires
- php: >=5.3.3
Requires (Dev)
- fabpot/php-cs-fixer: ~1.6
- memio/spec-gen: ~0.2
- phpspec/phpspec: ~2.2
- phpunit/phpunit: >=3.7,<5.0
This package is auto-updated.
Last update: 2022-02-01 12:47:56 UTC
README
A PHP library for Interrogatory Messages.
Interrogatory Messages are passed
to the QueryBus
service which returns the result of the first QueryMatcher
that supports it.
Installation
QueryBus can be installed using Composer:
composer require "gnugat/query-bus:~2.0"
Simple conversion
Let's take the following table:
CREATE TABLE article ( id int, title VARCHAR(255), content TEXT );
If we want to execute the following query:
SELECT id, title, content FROM article WHERE id = 42;
Then we have first to create a Query
, which is a simple
DTO:
<?php require __DIR__.'/vendor/autoload.php'; use Gnugat\QueryBus\QueryBus; class GetArticle { public $id; public function __construct($id) { if (null === $id) { throw new \InvalidArgumentException('Required parameter ID is missing'); } $this->id = (int) $id; } }
Note: Queries can contain simple validation, for example to check for
null
values.
Then we have to create a QueryMatcher
:
// ... use Gnugat\QueryBus\QueryMatcher; class GetArticleMatcher implements QueryMatcher { private $connection; public function __construct($connection) { $this->connection = $connection; pg_prepare($this->connection, 'get_article', 'SELECT id, title, content FROM articles WHERE id = $1'); } public function supports($query) { return $query instanceof GetArticle; } public function match($query) { $result = pg_execute($this->connection, 'get_article', array($query->id)); return pg_fetch_array($result, NULL, PGSQL_ASSOC); } }
Next we need to register it in QueryBus
:
// ... use Gnugat\QueryBus\QueryBus; $connection = pg_pconnect('dbname=blog'); $queryBus = new QueryBus(); $queryBus->add(new GetArticleMatcher($connection));
Finally we can actually execute the query:
// ... $articles = $queryBus->match(new GetArticle(42));
Further documentation
You can see the current and past versions using one of the following:
- the
git tag
command - the releases page on Github
- the file listing the changes between versions
You can find more documentation at the following links: