Bonjour,

Voila je rencontre un petit problème avec mon code. (il fonctionne tres dans Navicat, phpstorm, .....)

SELECT
*
FROM
doc_document
INNER JOIN doc_detail ON (doc_detail.documents_id = doc_document.id)
WHERE
doc_document.publish = 1
HAVING
doc_detail.documents_id in (  SELECT doc_document.id FROM doc_document WHERE doc_document.publish = true)
ORDER BY
doc_document.id ASC,
doc_detail.rank DESC

Ce que je veux

je veux convertir le code sql en code DQL.

        // Entity find all by list id
        $qb = $this->createQueryBuilder ( 'a' )
            ->leftJoin('a.details', 'c')
            ->where ( 'c.publish= :publish')
            ->where ( 'a.publish= :publish')
            ->andWhere ( 'doc_detail.documents_id in SELECT a.id FROM a WHERE a.publish = true' )
            ->setParameter ( 'local' , $local )
            ->setParameter ( 'publish' , $publish )
            ->orderBy ( 'c.rank' , 'ASC' )
            ->getQuery ()
//                   ->getResult ()
//            ->setMaxResults(1)
            ->getResult()

avec le code j'ai une erreur, biensur!!
Qui peut m'aider ?

Merci

1 réponse


zorg-27
Auteur
Réponse acceptée

Solution :

      // Entity find all by list id
        $qb = $this->createQueryBuilder ( 'a' )
            ->select('a,c')
            ->leftJoin('a.details', 'c', 'WITH', 'c.publish= :publish')
            ->where ( 'c.publish= :publish')
            ->andWhere ( 'a.publish= :publish')
            ->andWhere ( 'a._local= :local')
            ->setParameter ( 'publish' , $publish )
            ->setParameter('local', $local)
            ->orderBy('c.rank', 'DESC')
            ->getQuery ()
            ->getResult()
        ;

cela fonctionne tres bien en DQL.
Merci