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



从原则 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"和

相关内容

  • 没有找到相关文章