manuakasam/join-hydrator

一组非常轻量级的 hydrator 组件。这些 hydrator 的主要用途是将连接表中的查询结果注入到相应的嵌套对象中。

dev-master 2015-03-16 11:49 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:55:35 UTC


README

一组非常简单的 hydrator 辅助工具,用于轻松地将连接查询结果注入到相应的嵌套对象中。

SensioLabsInsight Scrutinizer Code Quality Build Status Coverage Status

安装

最好使用 composr 进行安装

composer require manuakasam/join-hydrator

如果需要选择版本,请选择 dev-master

使用示例

使用情况可以在 /test 文件夹中轻松检查。但这里再次列出

独立使用

<?php
namespace Test {
    use Sam\Hydrator\AggregateHydrator;
    use Sam\Hydrator\OneToOneHydrator;
    
    $data = [
        'foo_one' => 'TEST FOO ONE',
        'foo_two' => 'TEST FOO TWO',
        'bar_one' => 'BAR FIGHT ONE',
        'bar_two' => 'BAR FIGHT TWO',
        'baz'     => 'LONELY BAZ'
    ];
    
    $aggregateHydrator = new AggregateHydrator(
        new ClassMethods(),
        new OneToOneHydrator('foo_', 'setFoo', new Foo()),
        new OneToOneHydrator('bar_', 'setBar', new Bar())
    );
    
    $dummy = $aggregateHydrator->hydrate($data, new Dummy());
    
    get_class($dummy);           // instanceof Dummy
    get_class($dummy->getFoo()); // instanceof Foo()
    get_class($dummy->getBar()); // instanceof Bar()
}

与 Zend\Db\TableGateway 一起使用

namespace Test {
    use Zend\Db\Adapter\Adapter;
    use Zend\Db\ResultSet\HydratingResultSet;
    use Zend\Db\Sql\Select;
    use Zend\Db\TableGateway\TableGateway;
    use Sam\Hydrator\AggregateHydrator;
    use Sam\Hydrator\OneToOneHydrator;

    $adapter = new Adapter([
        'driver'         => 'Pdo',
        'username'       => 'admin',  //edit this
        'password'       => 'admin',  //edit this
        'dsn'            => 'mysql:dbname=someDB;host=localhost',
        'driver_options' => array(
            \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        )
    ]);

    $prototype = new HydratingResultSet(new AggregateHydrator(
        new ClassMethods(),
        new OneToOneHydrator('foo_', 'setFoo', new Foo()),
        new OneToOneHydrator('bar_', 'setBar', new Bar())
    ), new Dummy());
    
    $gateway   = new TableGateway('dummies', $adapter, null, $prototype);

    $resultSet = $gateway->select(function (Select $select) {
        $select->join('foo', 'clients.foo_id = foo.id', [
            'foo_id'   => 'id',
            'foo_bar'  => 'foo_bar',
            'foo_baz'  => 'foo_baz',
        ]);
        $select->join('bar', 'dummies.bar_id = bar.id', [
            'bar_id'   => 'id',
            'bar_bar'  => 'bar_bar',
            'bar_baz'  => 'bar_baz',
        ]);
    });

    $entryOne = $resultSet->current();
    
    get_class($entryOne);           // instanceof Dummy()
    get_class($entryOne->getFoo()); // instanceof Foo()
    get_class($entryOne->getBar()); // instanceof Bar()
}