2016-04-18 13 views
1
でハイドレーターの結果セットと集計

を初期化し、成功した次の配列を出力ハイドレーターを書くために管理している:私が参加しています2つのテーブルをZF2

/var/www/zf-skeleton/module/Application/src/Application/Mapper/ZendDbSqlMapper.php:95: 
object(Application\Model\Miscdamage)[655] 
    protected 'id' => string '97' (length=2) 
    protected 'vehicle_id' => string '3' (length=1) 
    protected 'added_user_id' => string '1' (length=1) 
    protected 'description' => string 'sdfsdsdf' (length=8) 
    protected 'date_added' => string '2016-04-15 08:19:17' (length=19) 
    protected 'date_repaired' => null 
    protected 'repaired_user_id' => null 
    protected 'status' => string '0' (length=1) 
    protected 'user' => 
    object(Application\Model\User)[664] 
     protected 'user_id' => string '1' (length=1) 
     protected 'username' => null 
     protected 'email' => string '[email protected]' (length=13) 
     protected 'display_name' => string 'Alex' (length=4) 

:これは、1つの結果を生成

$sql = new Sql($this->dbAdapter); 
    $select = $sql->select('misc_damage'); 
    $select->where(array('vehicle_id = ?' => $id))->order('date_added DESC'); 
    $select->join('user','user.user_id = misc_damage.added_user_id', 
      array(
       'user_display_name' => 'display_name', 
       'user_email' => 'email', 
       'user_username' => 'username' 
       ), 
    'left'); 

    $stmt = $sql->prepareStatementForSqlObject($select); 
    $result = $stmt->execute(); 

    if ($result instanceof ResultInterface && $result->isQueryResult()) { 

     $hydrator = new AggregateHydrator(); 
     $hydrator->add(new ClassMethods()); 
     $hydrator->add(new \Application\Hydrator\UserHydrator()); 

     $miscDamage = $hydrator->hydrate($result->current(), new \Application\Model\Miscdamage()); 
     var_dump($miscDamage); 
     die(); 
    } 

各車両に複数の損害票がある可能性があるため、複数の結果が必要です。私はAggregateHydratorと一緒にHydratingResultSetを使ってどうすればいいですか?結果を初期化したいと思います。return $resultSet->initialize($result);

何か助けてください!

答えて

2

私はこれを行う方法を見つけました。 HydratingResultSetReflectionを使用する必要があります。

use Zend\Stdlib\Hydrator\Reflection as ReflectionHydrator;  

    if ($result instanceof ResultInterface && $result->isQueryResult()) { 

     $hydrator = new AggregateHydrator(); 
     $hydrator->add(new ClassMethods()); 
     $hydrator->add(new \Application\Hydrator\UserHydrator()); 

     $resultSet = new HydratingResultSet(new ReflectionHydrator, new \Application\Model\Miscdamage()); 
     $resultSet->setHydrator($hydrator); 

     return $resultSet->initialize($result); 

    } 
+0

私は 'Reflection'ハイドレーターを追加することに役立っていることは100%確実ではないです。 '$ resultSet = new HydratingResultSet(new ReflectionHydrator ...' 'HydratingResultSet()'のハイドレーターとハイドレーティングオブジェクトをセットするだけで、まだ水分補給を開始しません。次の行では基本的に 'AggregateHydrator()'を'Reflection()'。だから 'Reflection()'ハイドレーターはなくなり、 '$ resultSet-> initialize($ result)'に参加しませんでした。 –