首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Doctrine2实体中存储"CASE WHEN“条件

在Doctrine2实体中存储"CASE WHEN“条件
EN

Stack Overflow用户
提问于 2012-11-24 09:09:06
回答 4查看 2.2K关注 0票数 18

从Doctrine 2.1开始,CASE WHEN语句是受支持的,但是关于它的文档并不多。我的目标是设置一个布尔值来判断一张照片是否被用户收藏:

代码语言:javascript
复制
       ->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 result作为实体上的一个属性。

代码语言:javascript
复制
        ->addSelect("CASE WHEN f.photo is NULL THEN false ELSE true END as p.is_favorited")

但不幸的是,Doctrine似乎不喜欢这样:

语法错误第0行,第65列:错误:预期的Doctrine\ORM\Query\Lexer::T_FROM,got‘’

除了在实体上设置DQL创建的属性之外,还有其他方法吗?

EN

回答 4

Stack Overflow用户

发布于 2013-09-04 01:44:01

无法直接在查询中设置属性值。相反,您可以将未映射字段添加到实体中,然后遍历结果并对其进行设置。在这种情况下,JMSSerializer序列化该字段,您可以在该字段上设置必要类型和其他元信息。

票数 2
EN

Stack Overflow用户

发布于 2014-12-20 04:41:51

你能试试这个吗。它将与DQL一起工作

代码语言:javascript
复制
->addSelect("SUM(CASE WHEN f.photo is NULL THEN 0 ELSE 1 END) as p.is_favorited");
票数 0
EN

Stack Overflow用户

发布于 2015-02-06 00:29:56

从错误中看,它听起来像是在抱怨,因为您的select语句中没有列出From表。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13537398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档