从 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/