2015-04-06 35 views
1

只是想知道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?

謝謝

回答

1

這是完全可能的,你只需要一個配置(可能是定製)Hydrator。

您的水合器需要知道從平面陣列將參數注入到對象中的邏輯,以及如何在提取時將對象模型還原爲平面陣列。

您可能正在考慮一些Hydrator策略或Hydrator命名策略,並可能將兩者結合使用。

使用正確的水化器,您可以實現您要查找的內容。

+0

感謝您的支持。正如你所提到的,我必須用我自己的定製水合劑。 :) – 2015-04-11 10:14:46