Zf2 HydratingResultSet和多个实体
问题描述:
只是想知道ZF2的水合结果集是否可以水合多个实体。考虑下面的代码片段:Zf2 HydratingResultSet和多个实体
$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?
谢谢
答
这是完全可能的,你只需要一个配置(可能是定制)Hydrator。
您的水合器需要知道从平面阵列将参数注入到对象中的逻辑,以及如何在提取时将对象模型还原为平面阵列。
您可能正在考虑一些Hydrator策略或Hydrator命名策略,并可能将两者结合使用。
使用正确的水化器,您可以实现您要查找的内容。
感谢您的支持。正如你所提到的,我必须用我自己的定制水合剂。 :) – 2015-04-11 10:14:46