Symfony query => Error: Literal esperado, obtenido ‘”‘

Tengo la siguiente consulta: (funciona bien sin la parte addSelect (‘CASE … END AS HIDDEN loquer’) que tiene como objective agregar algo de orden a mis comentarios, pero con esta parte se activa el siguiente mensaje de symfony: Error : Literal esperado, conseguido ‘”‘

public function myfindArticleandCommentsandScores($article,$language){ $qb = $this->createQueryBuilder('a'); $qb->leftjoin('a.comments','c') ->addSelect('c') ->leftJoin('c.scores','s') ->addSelect('s') ->leftJoin('s.user','u') ->addSelect('u') ->addSelect(' CASE WHEN c.show = "yes" THEN 1 // PROBLEME IS HERE ELSE 2 END AS HIDDEN show_order ') ->where( $qb->expr()->eq('a.id', '?1'), $qb->expr()->orX( $qb->expr()->eq('c.langue', '?2'), $qb->expr()->eq('c.langue', '?3') ) ) ->setParameters(array( '1'=> $article, '2'=> $language, '3'=> 'EN', )) ->orderBy('show_order', 'ASC') ->addOrderBy('c.scorenote', 'DESC'); return $qb->getQuery() ->getResult(); } 

Traté de reemplazar “sí” por “sí” pero luego recibí el siguiente mensaje: FatalErrorException: Parse: error de syntax, inesperado ‘oui’ (T_STRING)

Use setParameter para reemplazar un marcador de posición con una cadena o use "xyz='yes'"

Ahora cómo debería ser el código (una forma posible):

 public function myfindArticleandCommentsandScores($article,$language){ $qb = $this->createQueryBuilder('a'); $qb->leftjoin('a.comments','c') ->addSelect('c') ->leftJoin('c.scores','s') ->addSelect('s') ->leftJoin('s.user','u') ->addSelect('u') ->addSelect(' CASE WHEN c.show = \'yes\' THEN 1 // PROBLEME IS HERE ELSE 2 END AS HIDDEN show_order ') ->where( $qb->expr()->eq('a.id', '?1'), $qb->expr()->orX( $qb->expr()->eq('c.langue', '?2'), $qb->expr()->eq('c.langue', '?3') ) ) ->setParameters(array( '1'=> $article, '2'=> $language, '3'=> 'EN', )) ->orderBy('show_order', 'ASC') ->addOrderBy('c.scorenote', 'DESC'); return $qb->getQuery() ->getResult(); } 

Los delimitadores de cadena en DQL deben evitarse siempre que sea posible.

 ->addSelect(' CASE WHEN c.show = :show THEN 1 ELSE 2 END AS HIDDEN show_order ') ->setParameter('show', 'yes') 

Agregué un parámetro como este:

 ->addSelect(' CASE WHEN t.loquage = :show_first THEN 1 ELSE 2 END AS HIDDEN loquer ') ->setParameters(array( 'show_first'=> 'oui', 

gracias a Qoop quien me ayudó.