Zf2 HydratingResultSet 和多个实体
Zf2 HydratingResultSet and Multiple Entities
只是想知道 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();
}
但是在我的例子中,我需要水合结果集才能构建和 return 多个实体(即 AclRoleEntity 和 AclRoleTypeEntity)。这是可能的吗?如果是,如何(考虑结果集是两个实体组合的平面数组)。如果没有,是否有更好的替代方案可以在不使用 Doctrine/Propel 的情况下实现这一目标?
谢谢
完全有可能,您只需要一个配置好的(可能是自定义的)Hydrator。
你的 hydrator 需要知道将你的参数从一个平面数组注入你的对象的逻辑,以及如何在提取时将你的对象模型减少回一个平面数组。
您可能正在查看一些 Hydrator 策略或 hydrator 命名策略,并且可能是两者的组合。
使用正确的保湿器,您可以实现您的目标。
只是想知道 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();
}
但是在我的例子中,我需要水合结果集才能构建和 return 多个实体(即 AclRoleEntity 和 AclRoleTypeEntity)。这是可能的吗?如果是,如何(考虑结果集是两个实体组合的平面数组)。如果没有,是否有更好的替代方案可以在不使用 Doctrine/Propel 的情况下实现这一目标?
谢谢
完全有可能,您只需要一个配置好的(可能是自定义的)Hydrator。
你的 hydrator 需要知道将你的参数从一个平面数组注入你的对象的逻辑,以及如何在提取时将你的对象模型减少回一个平面数组。
您可能正在查看一些 Hydrator 策略或 hydrator 命名策略,并且可能是两者的组合。
使用正确的保湿器,您可以实现您的目标。