symfony fosrestbundle 实例化entity为json时把所有relations都获取了,怎么更改?

发布于 2022-09-05 09:11:21 字数 1717 浏览 29 评论 0

背景

三个实体关系如下

Reply BelongsTo Topic

Reply BelongsTo User

User ManyToMany Followers(Users)自关联

控制器方法

/**
 *@Route("/topics/{id}/replies", name="topic_add_reply")
 *@Method('POST')
 */
public function addTopicReply($id, Request $request)
{
    $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
    $topic = $this->getTopicManager()->findTopicById($id);
    $reply = $this->getReplyManager()->createReply($topic, $this->getUser());
    $form =  $this->createForm(TopicReplyType::class, $reply, [
        'csrf_protection' => false
    ]);
    $form->handleRequest($request);
    $view = $this->view()->setFormat('json');
    if ($form->isSubmitted() && $form->isValid()) {
        $this->getReplyManager()->saveReply($reply);
        $view->setData(['reply' => $reply]);
    } else {
        $view->setStatusCode(400)
            ->setData(array(
                'form' => $form,
            ));
    }
    return $this->handleView($view);
}

结果

json的结果把相关的relation都取出来了,七大姑八大姨一大坨用不到的数据
clipboard.png

问题

无疑这个效率是非常低的,怎么才可以灵活的控制要获取的relation呢?

比如在这个方法中,我只想获取reply实体本身;可能在另外一个方法中我希望实例化reply和它所属的topic;
又可能在第三个方法中我可以实例化reply,它的topic和它的user;

类似在cakephp中的解决方案

$reply = $Replies->findById(1)->contain(['Topic', 'User.Followers'])   

通过contain方法可以灵活的控制你想获取到的relations

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

碍人泪离人颜 2022-09-12 09:11:21

自问自答吧,在jms serializer和官方的serializer里支持通过anotation 对关联分组

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文