IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Doctrine2 PHP Discussion :

Requête SQL > DQL


Sujet :

Doctrine2 PHP

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Par défaut Requête SQL > DQL
    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

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Par défaut
    Petite avancer en SQL quand au niveau de de la variable $identiteId j'ai une valeur dans la table objet_identite j'ai l'erreur ci-dessus en revanche quand j'ai une valeur non existante dans objet_identite il me retourne bien la liste d'objet avec l'objet identite rataché qui sont null du coup.

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Par défaut
    Ça y est j'ai trouvé !!! Et j'ai un bon mal de tête en prime !!!
    Pour la fonction addEntityResult() et addJoinedEntityResult() il faut mettre l'objet sous la forme "Societe\ProjetBundle\Entity\Objet" et non pas "SocieteProjetBundle:Objet"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/07/2024, 15h41
  2. Requête Sql a DQL
    Par Ina09 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 21/05/2015, 18h03
  3. Requête Sql a DQL
    Par Ina09 dans le forum DB2
    Réponses: 2
    Dernier message: 21/05/2015, 17h52
  4. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  5. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo