2014-10-03 42 views
0

这可能吗?级联水合物与DoctrineHydrator

$hydrator = $this->getServiceLocator()->get('DoctrineHydrator'); 
    $hydrator->hydrate((array) $data, $PlatformEntity); 

Hydrator hydrate只有1级的阵列。

回答

0

阵列水合不是实现这种情况的最佳方式。相同的情况在这里:

Person 
    - id_person 
    - name 
    - child //self refering 

阵列水合只能选择第一级。我解决它采取的这两个选项之一:

  1. 使用left join协会

    $query = $entityManager->createQueryBuilder() 
    ->select('p1, p2, p3, p4, p5, p6') 
    ->from('Entity\Person', 'p1') 
    ->leftJoin('p1.child', 'p2') 
    ->leftJoin('p2.child', 'p3') 
    ->leftJoin('p3.child', 'p4') 
    ->leftJoin('p4.child', 'p5') 
    ->leftJoin('p5.child', 'p6') 
    ->createQuery(); 
    

    ,然后,使用数组水化。

  2. 创建您自己的递归函数以手动添加数组中的每个元素。