我正在使用FOSRestBundle构建REST API。
我的实体有很多OneToMany / ManyToOne双向关系。
每当我想GET
某个具有JSON格式的实体时,例如 web/app_dev.php/users/1.json
我得到的对象比实际需要的要大得多:所有相关对象都是递归包含的。我的控制器返回对象并具有@View
注释。
如何返回仅反映数据库行的对象(即仅包含与我相关的对象的ID)?
答案 0 :(得分:0)
您可以使用注释(http://jmsyst.com/libs/serializer/master/reference/annotations:参见群组,曝光/排除或MaxDepth)
我更喜欢使用群组注释(我正是我想要的!)
例如:
在Entity类中:
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @JMS\Groups({"main"})
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="DocumentUnique", inversedBy="Evaluations")
* @ORM\JoinColumn(name="documentUniqueId", referencedColumnName="id")
* @JMS\Groups({"show", "all"})
*/
protected $DocumentUnique;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=20)
* @JMS\Groups({"main","all"})
*/
private $title;
在控制器中:
/**
* @Rest\View(serializerGroups={"main"})
*/
public function cgetAction()
{
return $this->getRepository('MyEntity')->findAll();
}
如果要显示一个关系的id,可以使用VirtualProperty注释:
/**
* @JMS\VirtualProperty
* @JMS\SerializedName("documentUniqueId")
* @JMS\Groups("main")
*/
public function getDocumentUniqueId() {
if (!$this->DocumentUnique) return null;
return $this->DocumentUnique->getId();
}