Zf2 HydratingResultSet和多个实体

时间:2015-04-06 10:54:41

标签: php zend-framework doctrine-orm zend-framework2

只是想知道ZF2的保湿结果是否可以保湿多个实体。请考虑以下代码段:

$sql = new Sql($this->adapter);
    $sqlObject = $sql->select()
        ->from([
            'ART' => 'acl_roles'
        ])
        ->join([
                'ARTT' => 'acl_role_types',
            ],
            'ART.type_id = ARTT.id',
            [
                'ARTT.id'         => 'id',
                'ARTT.identifier' => 'identifier',
                'ARTT.name'       => 'name',
                'ARTT.status'     => 'status',
                'ARTT.dateAdded'  => 'date_added',
            ],
            Select::JOIN_INNER
        )
        ->where([
            'ART.identifier' => $identifier,
        ])
        ->columns([
            'ART.id'          => 'id',
            'ART.type_id'     => 'type_id',
            'ART.identifier'  => 'identifier',
            'ART.name'        => 'name',
            'ART.status'      => 'status',
            'ART.description' => 'description',
            'ART.dateAdded'   => 'date_added',
        ]);

现在,如果查询是在单个实体上,我可以执行以下操作:

$stmt = $sql->prepareStatementForSqlObject($sqlObject);
$resultset = $stmt->execute();
if ($resultset instanceof ResultInterface && $resultset->isQueryResult()) {
    $hydratingResultSet = new HydratingResultSet(new ArraySerializable, new EntityClass);
    $hydratingResultSet->initialize($resultset);
    return $hydratingResultSet->current();
}

然而在我的情况下,我需要保湿结果集能够构建并返回多个实体(即AclRoleEntity和AclRoleTypeEntity)。这是可能的吗?如果是的话(考虑结果集是两个实体组合的平面数组)。如果没有使用Doctrine / Propel的话,没有更好的替代方案吗?

由于

1 个答案:

答案 0 :(得分:1)

完全有可能,你只需要一个配置好的(可能是定制的)Hydrator。

你的保湿器需要知道从平面阵列将参数注入对象的逻辑,以及如何在提取时将对象模型缩减回平面阵列。

您可能正在考虑一些Hydrator Strategies或Hydrator命名策略以及两者的组合。

使用正确的保湿剂,您可以实现您所需要的效果。