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

Dan*_*ndy 18 php mysql symfony doctrine-orm

从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));
Run Code Online (Sandbox Code Playgroud)

但是因为JMSSerializer将我的实体转换为json,所以我想将CASE WHEN结果设置为实体的属性.

        ->addSelect("CASE WHEN f.photo is NULL THEN false ELSE true END as p.is_favorited")
Run Code Online (Sandbox Code Playgroud)

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

[语法错误]第0行,第65行:错误:预期的Doctrine\ORM\Query\Lexer :: T_FROM,得到'.'

是否可以在实体上设置DQL创建的属性?

Ale*_* B. 2

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