Witajcie.

(ZF2 lub S2 chyba nie różnią się w korzystaniu z hydratora D2)

Czy spotkaliście się z kaskadową hydracją?

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


$data zawiera wielowymiarową tablicę z danymi w takiej formie w jakiej Doctrine te dane zwraca (czyli format tablicy jest odpowiedni aby wykonać na niej kaskadową hydrację).
$PlatformEntity to encja edytowanego/tworzonego rekordu.

Po przepuszczeniu encji przez hydrator powstają w niej odpowiednie zagnieżdżenia, czyli encje rekordów relacyjnych. To znaczy że hydrator wykrył dodatkowe dane i przygotował pod nie przestrzeń.
Jednak wszystkie encje na głębokości większej niż 1 nie są hydrowane...

Encje pobieram w taki sposób:
  1. if (isset($data['id'])) {
  2. $PlatformEntity = $em->getRepository('Application\Entity\Platform')->find($data['id']);
  3. unset($data['id']);
  4. } else {
  5. $PlatformEntity = new Platform();
  6. }


Hydrator tak:
  1. 'DoctrineHydrator' => function($sm){
  2. return new \DoctrineModule\Stdlib\Hydrator\DoctrineObject($sm->get('Doctrine\ORM\EntityManager'), false);
  3. },