从 Doctrine 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")
但不幸的是,Doctrine 似乎并不喜欢这样:
[语法错误] 第 0 行,第 65 列:错误:预期的 Doctrine\ORM\Query\Lexer::T_FROM,得到 '.'
在实体上设置 DQL 创建的属性是否有替代方法?