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
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
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();
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde
Mes Articles/Critiques :
Merise - Guide pratique
PHPExcel
PostgreSQL : Administration et exploitation d'une base de données
PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle
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.
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.
et bien, séparerons ta requête en 2 et testons la séparément :
la 1ere :
ça donne quoi ?
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();
la 2eme
ça donne quoi ?
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();
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);
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')
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();
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde
Mes Articles/Critiques :
Merise - Guide pratique
PHPExcel
PostgreSQL : Administration et exploitation d'une base de données
PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager