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

Symfony PHP Discussion :

SQL vers DQL


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Points : 6
    Points
    6
    Par défaut SQL vers DQL
    Salut j'ai cette requête et je veux la traduirre en DQL


    SELECT * FROM Commissions c where c.id not in
    (SELECT a.commission_id FROM Avis a WHERE a.dossier_id =59)


    j'ai les entite suivant

    Nom : diagg.PNG
Affichages : 213
Taille : 16,7 Ko

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Je ne connais pas DQL , rien de tel qu'un vraie requête.

    Mais un truc du genre, lu dans la doc Doctrine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    $query = $em->createQuery(SELECT c FROM MyProject\Model\Commissions c where c.id not in
    (SELECT a.commission_id FROM MyProject\Model\Avis a WHERE a.dossier_id =59);
    $users = $query->getResult();

  3. #3
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    en même temps on va pas lui faire tout le boulot. on est pas des jambons
    Le minimum est de se documenter et au moins d'essayer de faire la requête.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Points : 6
    Points
    6
    Par défaut [Semantical Error] line 0, col 9 near 'commission FROM': Error: Invalid PathExpression. Must be a StateFieldPa
    Voila ce que j'ai deja fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        $query = $this->getDoctrine()->getManager()->createQueryBuilder();
        $subquery = $this->getDoctrine()->getManager()->createQueryBuilder();
     
          $subquery->select('a.commission')
        ->from('appBundle:Avis', 'a')
        ->where('a.dossier = :id')
        ->setParameter('id', 59);
     
        $query->select('c')->from('appBundle:Commissions', 'c');
        $query->where(
                $query->expr()->notIn('c.id', $subquery->getDQL())
            );
         $r=query->getQuery()->getResult();

    il me dit cela :

    [Semantical Error] line 0, col 9 near 'commission FROM': Error: Invalid PathExpression. Must be a StateFieldPathExpression.

  5. #5
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    et bien, séparerons ta requête en 2 et testons la séparément :

    la 1ere :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $subquery->select('a.commission')
        ->from('appBundle:Avis', 'a')
        ->where('a.dossier = :id')
        ->setParameter('id', 59);
     
         $r=subquery->getQuery()->getResult();
    ça donne quoi ?


    la 2eme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
        $query->select('c')->from('appBundle:Commissions', 'c');
     
            );
         $r=query->getQuery()->getResult();
    ça donne quoi ?

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query->select('c')->from('appBundle:Commissions', 'c');
    • fonction est fonction parfaitement mais l'erreur est au niveau de subquery



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $subquery->select('a.commission')
        ->from('appBundle:Avis', 'a')
        ->where('a.dossier = :id')
        ->setParameter('id', 59);

  7. #7
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $subquery->select('c.*')
        ->from('appBundle:Avis', 'a')
        ->from('appBundle:Commissions', 'c')
        ->where('a.dossier = :id')
        ->setParameter('id', 59);
        ->andWhere('c = :a.commission')

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Comprendrais jamais l’intérêt de ne pas vouloir faire l'effort de faire de vrais requêtes SQL.

    D'après la doc ceci devrait-être bon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $sql = " 
            SELECT * FROM Commissions c where c.id not in
    (SELECT a.commission_id FROM Avis a WHERE a.dossier_id = ?
        ";
     
        $stmt = $this->getDoctrine()->getEntityManager()->getConnection()->prepare($sql);
        $stmt->execute([59]);
        return $stmt->fetchAll();

  9. #9
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    c'est pour profiter de la puiissaaance de doctrine 2. AH AH AH
    en effet, maitre pylos ça fonctionne tout aussi bien ce que tu as fais.

    j'imagine bien qu'avec le DQL c'est pour profiter de la construction en "légo". tu pars d'une requête de base et en fonction des besoins tu ajoutes des bouts avec des filtres par exemple.
    mais je laisse à d'autres trouver des arguments car je pense que doctrine c'est le seul point faible de Symfony

Discussions similaires

  1. Conversion SQL vers DQL
    Par houcine88 dans le forum Doctrine2
    Réponses: 1
    Dernier message: 25/04/2013, 12h57
  2. Migration de bases de données de My SQL vers SQL Server 2005
    Par thvphan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/04/2006, 13h34
  3. SQL vers Fichier Texte
    Par annedjomo dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 24/11/2005, 11h47
  4. Exporter des données d'un requete SQL vers excel (csv)
    Par PrinceMaster77 dans le forum ASP
    Réponses: 9
    Dernier message: 08/10/2005, 22h28
  5. de SQL vers T-SQL sous MS SREVER
    Par Nadaa dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/09/2003, 15h37

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