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.
QueryBus can be installed using Composer:
composer require "gnugat/query-bus:~2.0"
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));
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: