monii/specification-sql-adapter

此包已被放弃且不再维护。未建议替代包。

Specification SQL Adapter

dev-master / 0.0.x-dev 2016-02-24 11:30 UTC

This package is not auto-updated.

Last update: 2016-12-03 16:03:12 UTC


README

Monii实现规格模式的SQL适配器。它提供将规格渲染成SQL查询的工具。

Latest Stable Version Total Downloads Latest Unstable Version License
Build Status

需求

安装

$> composer require monii/specification-sql-adapter

直到发布稳定版本或如果更喜欢开发版本,请使用

$> composer require monii/specification-sql-adapter:@dev

限制

此库目前不支持连接(JOIN),并且可能永远不会支持。底层的SqlQuery类非常简单,需要更多测试。它在我们设计的范围内工作良好,但还需要大量工作。

如果您需要更强大的功能,可以考虑编写自己的实现。规格库旨在支持专门的渲染适配器,以满足特定的需求。

示例用法

仓库

通过查看一个示例Doctrine DBAL仓库实现,可以简单地了解如何使用此渲染器与Monii的规格包一起使用。在这种情况下,我们的查询构建器设置为知道如何将两个属性映射到相应的表列。我们还假设objectsFromRows是共享的,这样它就可以接收一个数组来构建所选择的对象。

class DbalContactRepository implements ContactRepository
{
    /**
     * @var Connection
     */
    private $connection;

    /**
     * @var SqlSpecificationQueryBuilder
     */
    private $sqlSpecificationQueryBuilder;

    /**
     * @var string
     */
    private $tableName;

    /**
     * @param string $tableName
     */
    public function __construct(
        Connection $connection,
        SqlSpecificationQueryBuilder $sqlSpecificationQueryBuilder,
        $tableName = 'terse_contact'
    ) {
        $this->connection = $connection;
        $this->sqlSpecificationQueryBuilder = $sqlSpecificationQueryBuilder;
        $this->tableName = $tableName;
    }

    /**
     * {@inheritdoc}
     */
    public function findMatching(Specification $specification)
    {
        $sqlQuery = $this->sqlSpecificationQueryBuilder->buildQuery($specification, [
            'person.firstName' => 'person_first_name',
            'person.lastName' => 'person_last_name',
        ]);

        $statement = $this->connection->prepare($sqlQuery->getSql($this->tableName));
        $statement->execute($sqlQuery->getValues());
        $results = $statement->fetchAll();

        return $this->objectsFromRows($results);
    }
}

许可

MIT,请参阅LICENSE。

社区

想要参与进来?以下是一些方法

  • 在irc.freenode.org的#monii IRC频道找到我们。
  • 在Twitter上提及@moniidev