Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
J'utilise Doctrine2 avec ZF2 et j'ai besoin de faire une requête SQL du type :
[lang=sql]SELECT * FROM table1 JOIN table2 ON table1.champ1 = table2.champ2 WHERE table1.champ3 = 1 ;
je ne vois pas du tout comment faire ça avec mes entitées. J'ai essayé des trucs comme ça :
[lang=php]$resultsCom = $this->getEntityManager()->getRepository('\Module\Entity\Table1')->createQueryBuilder('a') ->innerJoin($this->getEntityManager()->getRepository('\Module\Entity\Table2'), 's', 'ON', 'a.champ1 = s.champ2') ->where('a.champ3=1') ->getQuery() ->getResult();
mais j'ai des erreurs :
[lang=php]Object of class Doctrine\\ORM\\EntityRepository could not be converted to string in /home/zf2/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Join.php on line 141
Je ne sais pas comment faire pour spécifier mon entité dans la requête.
Merci d'avance
Hors ligne
Salut, tu écris du DQL donc une chaine de caractère c'est donc normal que si tu lui passes un objet ça ne fonctionne pas !
Si tu as une relation dans ton entité tu peux faire comme ça dans ton repository :
[lang=php] $qb = $this->getEntityManager()->createQueryBuilder(); $qb->select('t', 'r')->from('Application\Entity\MaTable', 't')->innerJoin('t.relation', 'r');
Dans ton cas tu dois utiliser le mot clé with dans ton innerJoin ça donne ça
[lang=php] [...]->innerJoin('t.relation (ou FQCN de l\'entité)', 'r', 'WITH', 'condition');
Ou encore directement en DQL :
[lang=php] 'SELECT t FROM MaTable t JOIN TableJoin tj WITH t.champ1 = tj.champ2';
Cependant je t'encourage à aller lire la doc c'est plus complet et plutôt bien expliqué.
Hors ligne
Merci beaucoup, c'est parfait !!
Hors ligne
Bonjour,
Voilà une semaine que je bloque sur la jointure, j'en ai marre de chercher
J'essaye aussi de faire une jointe qui n'a pas de relation définit dans mon Entity. J'aimerai donc mapper le résultat de la jointure sur un champ de mon Entity.
Comment que l'on fait
Merci d'avance
Hors ligne
Pourrais-tu créer ton propre sujet et nous donner des extraits de ton code ?
Hors ligne