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
Pièce jointe 178997
Version imprimable
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
Pièce jointe 178997
Je ne connais pas DQL , rien de tel qu'un vraie requête.
Mais un truc du genre, lu dans la doc Doctrine
Code:
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();
en même temps on va pas lui faire tout le boulot. on est pas des jambons :mrgreen:
Le minimum est de se documenter et au moins d'essayer de faire la requête.
Voila ce que j'ai deja fait :lol:
Code:
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:
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:
1
2
3
4
5
6 $query->select('c')->from('appBundle:Commissions', 'c'); ); $r=query->getQuery()->getResult();
Code:$query->select('c')->from('appBundle:Commissions', 'c');
- fonction est fonction parfaitement mais l'erreur est au niveau de subquery
Code:
1
2
3
4 $subquery->select('a.commission') ->from('appBundle:Avis', 'a') ->where('a.dossier = :id') ->setParameter('id', 59);
Code:
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:
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();
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