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é?
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.
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");
D'après l'erreur, on dirait qu'il se plaint parce que vous n'avez pas de table dans votre déclaration select.
Vous avez juste besoin d'ajouter votre
->from()
ligne qui donne le nom de la table pour "F" et