Salut, donc voila j'ai une requête SQL qui marche au top soucis j'arrive pas à faire la même en DQL
Requête SQL :
le soucis c'est que en DQL on ne peut pas rajouter la clause "AND" sur le LEFT JOIN car la liaison ce fait dans les annotations...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT o.id, o.nom, coalesce(oi.lecture,false), coalesce(oi.creation,false), coalesce(oi.modification,false), coalesce(oi.suppression,false) FROM objet o LEFT OUTER JOIN objet_identite oi ON oi.objet_id = o.id AND oi.identite_id = $identiteId
Donc mon annotation ressemble à ça :
ObjetIdentite.php
ma requête DQL devrai ressembler à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 @orm\ManyToOne(targetEntity="Objet", inversedBy="objetIdentite") * @orm\JoinColumn(name="objet_id", referencedColumnName="id") */ $Objet
Donc comme ça ne marche bien sur pas je me suis lancé dans une requête SQL avec Doctrine qui ressemble à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT o.id, o.nom, COALESCE(oi.lecture, false), COALESCE(oi.creation), COALESCE(oi.modification), COALESCE(oi.suppression) FROM SocieteProjetBundle:Objet o LEFT OUTER JOIN o.objetIdentite oi AND oi.identite_id = $identiteId
et ça me donne une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 $rsm = new ResultSetMapping; $rsm->addEntityResult('SocieteProjetBundle:Objet', 'o'); $rsm->addFieldResult('o', 'id', 'id'); $rsm->addFieldResult('o', 'nom', 'nom'); $rsm->addJoinedEntityResult('SocieteProjetBundle:ObjetIdentite' , 'oi', 'o', 'objetIdentite'); $rsm->addFieldResult('oi', 'objetIdentite_id', 'id'); $rsm->addFieldResult('oi', 'lecture', 'lecture'); $rsm->addFieldResult('oi', 'creation', 'creation'); $rsm->addFieldResult('oi', 'modification', 'modification'); $rsm->addFieldResult('oi', 'suppression', 'suppression'); $sql = " SELECT o.id, o.objet, oi.id AS objetIdentite_id, coalesce(oi.lecture,false), coalesce(oi.creation,false), coalesce(oi.modification,false), coalesce(oi.suppression,false) FROM objet o LEFT OUTER JOIN objet_identite oi ON a.id = oi.objet_id AND oi.identite_id = $identiteId "; $query = $this->_em->createNativeQuery($sql, $rsm); $droit = $query->getResult();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Notice: Undefined index: Societe\ProjetBundle\Entity\ObjetIdentite in C:\wamp\www\Projet\vendor\doctrine\lib\Doctrine\ORM\Internal\Hydration\ObjectHydrator.php line 170 500 Internal Server Error - ErrorException
Partager