如何在Symfony Serializer中序列化实体关系ManyToOne?

时间:2018-01-24 18:12:32

标签: php symfony

例如,我有关系User→Posts,我想使用Symfony Serialize Component在Post中获取用户的id:

/**
 * @var User
 * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="posts")
 * @Groups({"public"})
 */
private $user;

如何获取具有用户ID的Post实体的JSON?

{
   ...
   "user_id": 123,
   ...
}

但也可以序列化用户。

2 个答案:

答案 0 :(得分:2)

根据文档,您可以使用处理序列化深度来避免CircularReferenceException实体关系。  (https://symfony.com/doc/current/components/serializer.html#handling-serialization-depth

<?php
namespace Acme;

class MyObj
{
    public $foo;

    /**
     * @var self
     */
    public $child;
}

$level1 = new MyObj();
$level1->foo = 'level1';

$level2 = new MyObj();
$level2->foo = 'level2';
$level1->child = $level2;

$level3 = new MyObj();
$level3->foo = 'level3';
$level2->child = $level3;

产生

$result = $serializer->normalize($level1, null, array('enable_max_depth' => true));
/*
$result = array(
    'foo' => 'level1',
    'child' => array(
            'foo' => 'level2',
            'child' => array(
                    'child' => null,
                ),
        ),
);
*/

答案 1 :(得分:0)

所以这样的事情会起作用:

/**
 * @return int|null
 * @Groups({"public"})
 */
public function getUserId(): ?int
{
    return $this->getUser()->getId();
}