php - 在 Doctrine2 实体中存储 "CASE WHEN"条件

标签 php mysql symfony doctrine-orm

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

       ->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")

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

[Syntax Error] line 0, col 65: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got '.'

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

最佳答案

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

关于php - 在 Doctrine2 实体中存储 "CASE WHEN"条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13537398/

相关文章:

php - 如何在不使用提交的情况下从下拉列表中选择值

php - MySQL - 加法、减法和计算天数

php - 在MYSQLI中插入未指定长度的数组

mongodb - 绑定(bind)学说ORM实体和学说ODM文档,在SonataAdminBundle中使用

php - Symfony 引导文件,我的意思是所有其他文件包含的文件

PHP函数名以一个下划线开头

java - Spring Boot应用程序无法在 Controller 中找到定义的存储库

.net - MySQL .NET 连接器 - 获取该列所属的表?

php - 从由多列分隔的动态数组中插入 mysql 中的行

symfony - 奏鸣曲管理员通过显示链接更改编辑链接