首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对称循环关系参考问题

对称循环关系参考问题
EN

Stack Overflow用户
提问于 2019-02-11 06:26:27
回答 1查看 158关注 0票数 0

我有下面的设置

代码语言:javascript
复制
Entity/User
---------------
 /**
  * @ORM\ManyToMany(targetEntity="App\Entity\UserGroup", mappedBy="users")
  */
  private $userGroups;


Entity/UserGroup
    ---------------
 /**
  * @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="userGroups")
  */
  private $users;

如你所见,我有manyTomany双向关系,

  • 用户属于多个组。
  • 一个组可以有多个用户。

当我序列化关系时(为了服务API请求),

我得到了深度嵌套的json对象。

代码语言:javascript
复制
$groups = $this->entityManager
     ->getRepository(UserGroup::class)
     ->findAll();
$normalizer = new ObjectNormalizer();
$normalizer->setCircularReferenceLimit(1);

$normalizer->setCircularReferenceHandler(function ($object) {
     return $object->getId();
});

$encoder = new JsonEncoder();
$serializer = new Serializer(array($normalizer), array($encoder));

$groups = $serializer->serialize($groups, 'json');
return View::create(json_decode($groups, true), Response::HTTP_OK);

输出

我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2019-02-11 13:18:12

您可以尝试使用@Groups()注释指定要序列化的对象的哪些属性,具体取决于上下文。

https://symfony.com/doc/current/components/serializer.html#attributes-groups

因此,在序列化对象时,使用组传递一个数组。

代码语言:javascript
复制
$groups = $serializer->serialize($groups, 'json', ['groups' => 'user_groups.index']);

在实体中,将组添加到要包含的属性中。

代码语言:javascript
复制
 Entity/UserGroup
 ---------------
 /**
  * @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="userGroups")
  * @Groups({"user_groups.index"})
  */
  private $users;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54624986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档