Stockage de la condition "CASE WHEN" dans l'entité Doctrine2

selon la Doctrine 2.1, le cas où la déclaration est appuyée mais il n'y a pas beaucoup de documentation sur elle. Mon objectif est de définir une valeur de type boolean pour savoir si une photo a été ajoutés à vos favoris par un utilisateur:

       ->addSelect("CASE WHEN f.photo is NULL THEN false ELSE true END as is_favorited")
       ->leftJoin("p.favorites", 'f', 'WITH', 'f.owner = :viewer')
       ->orderBy("p.date_posted", "DESC")
       ->setParameters(array("owner" => $owner, "viewer" => $viewer));

mais parce que mes entities sont transformées en json par JMSSerializer, je voudrais mettre le cas quand résultat comme une propriété sur l'entity.

        ->addSelect("CASE WHEN f.photo is NULL THEN false ELSE true END as p.is_favorited")

mais malheureusement la Doctrine ne semble pas comme ceci:

[Erreur de Syntaxe ligne 0, col 65: Error: Expected DoctrineORMQueryLexer:: T_FROM, got '.'

Existe-t-il une alternative à la définition des propriétés créées par le DQL sur une entité?

18
demandé sur Dandy 2012-11-24 05:09:05

4 réponses

Il n'y a aucun moyen de définir la valeur de la propriété dans la requête directement. À la place, vous pouvez ajouter un champ non-mappé en entity, puis parcourir les résultats et les définir. Dans ce cas JMSSerializer sérialisez ce champ et vous pouvez définir le type nécessaire et d'autres méta-informations dessus.

2
répondu Alexey B. 2013-09-03 17:44:01

Pouvez-vous essayer cette. il fonctionnera avec DQL

->addSelect("SUM(CASE WHEN f.photo is NULL THEN 0 ELSE 1 END) as p.is_favorited");
0
répondu SMNTB 2014-12-19 20:41:51

D'après l'erreur, on dirait qu'il se plaint parce que vous n'avez pas de table dans votre déclaration select.

-1
répondu gpayne_007 2015-02-05 16:29:56

Vous avez juste besoin d'ajouter votre

->from() 

ligne qui donne le nom de la table pour "F" et

-1
répondu user4624169 2015-03-17 16:41:17