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 :
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
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...

Donc mon annotation ressemble à ça :

ObjetIdentite.php

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
ma requête DQL devrai ressembler à ç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
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
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();
et ça me donne une erreur :

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