samedi 23 août 2014

Requête SQL et hydratation d'objet via Doctrine2

Symfony2 nous permet de créer des entités, et des managers pour ces entités.
Si dans un de ces managers, vous avez besoin d'exécuter une requête SQL (à ne pas confondre avec une requête DQL), le retour sera sous la forme de tableau et non pas d'entités comme pour une requête DQL.

Pour hydrater automatiquement le retour de votre requête SQL, voici un exemple :
$rsmb = new ResultSetMappingBuilder($this->_em); // indique quelle entité devra être hydratée par les retours de la requête $rsmb->addRootEntityFromClassMetadata(Foo::class, 'foo'); // configuration du mapping pour une entitée liée // elle doit être faite, même si l'entitée liée n'est pas sélectionnée dans votre requête SQL // si vous ne le faites pas, le type de la clef étrangère ne sera pas connu par Doctrine, // qui la laissera en string, alors qu'elle devrait probablement être castée en int $rsmb->addJoinedEntityFromClassMetadata( Bar::class, 'bar', 'foo', 'Foo::$lienAvecBar', ['id' => 'bar_id'] ); // la requête à exécuter $query = $this->_em->createNativeQuery('SELECT * FROM table_foo foo', $rsmb); // $result contiendra un tableau d'entités Foo $result = $query->getResult();

Sources
devandco
ldaguise

Aucun commentaire:

Publier un commentaire