从原则 2.1 开始,CASE WHEN 语句得到了支持,但没有很多关于它的文档。我的目标是设置一个布尔值来判断照片是否已被用户收藏:
->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));
但是因为我的实体正在被JMSSerializer转换为json,所以我想将CASE WHEN结果设置为实体上的属性。
->addSelect("CASE WHEN f.photo is NULL THEN false ELSE true END as p.is_favorited")
但不幸的是,教义似乎不喜欢这样:
[语法错误] 第 0 行,第 65 行:错误:预期原则\ORM\查询\词法分析器::T_FROM,得到"."
是否有在实体上设置 DQL 创建的属性的替代方法?
无法直接在查询中设置属性值。相反,您可以将未映射的字段添加到实体中,然后遍历结果并进行设置。在这种情况下,JMSSerializer
序列化该字段,您可以在其上设置必要的类型和其他元信息。
你能试试这个吗? 它将与 DQL 一起使用
->addSelect("SUM(CASE WHEN f.photo is NULL THEN 0 ELSE 1 END) as p.is_favorited");
从错误来看,它听起来像是在抱怨,因为您的选择语句中没有列出 FROM 表。
你只需要添加你的
->from()
为"F"和