原则将实体发送到 DQL 的新构造函数



我在Symfony2中有一个带有Doctrine的博客应用程序,由三个实体组成

  • 发布
  • 评论
  • 用户

  • 一个帖子可以有很多评论

  • 一个用户可以有很多评论

此应用程序有一个 JSON API 调用"/me/comments"

我希望它回来

[
    {
       'text': 'great post',
       ... 10 other field a comment can have ...
       'post': { 'id': 3}
    },
    {
       'text': 'i dont like it',
       ... 10 other field a comment can have ...
       'post': {'id': 4}
    },
]

正常的教义函数向我返回 json 中的所有关系(用户、帖子),我不想要,因为 Post 可以包含大量文本,所以我只对 Id 感兴趣

我尝试了很多解决方案,我找到了那个

http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#new-operator-syntax

所以现在我的 DQL 查询看起来像那样

SELECT NEW CommentDTO(c) FROM Comment as c WHERE c.author = :user

CommentDTO 的构造函数看起来像这样

__construct(Comment c) {
   $this->text = c.getText();
   $this->post = [ 'id' => c.getPost().getId() ];
}

当我执行它时,我得到了

{
   "code":500,
   "message":"Argument 1 passed to MVMS\ApiBundle\Entity\CommentDTO::__construct() must be an instance of MVMS\ApiBundle\En
tity\Comment, integer given"
}

当然,我可以一一给出参数,但 Comment 有十几个字段,一个接一个地发送它们似乎非常黑客化。

有没有办法直接发送对象?

正如@Cerad在评论中提到的,根据文档,目前没有实现这一目标的方法,该文档在 2017 年仍然相关:

请注意,只能将标量表达式传递给构造函数。

我在问题跟踪器中找不到相关的功能请求,因此在可预见的未来可能无法实现。

相关内容

  • 没有找到相关文章

最新更新