我有2个实体,与作者和书本有多对多的关系。
现在,当我将Book序列化为json时,它将为我提供嵌套作者对象的所有字段。
{
"id": 3,
"name": "clean code",
"authors": [
{
"id": 4,
"name": "Martin Robert "
},
...
]
}
但是我如何使其仅返回特定字段,例如仅返回每个作者的姓名。
我尝试将组添加到Author实体,但是当我运行序列化程序时,组似乎不适用于嵌套对象,因为得到的结果相同。
$book=$this->serializer->normalize($book, null, ['groups' => 'Concise']);
$book=$this->serializer->serialize($book,'json');
答案 0 :(得分:0)
您应该看一下JMS Serializer,它是用于序列化对象的强大库,您可以通过配置应保留在哪个字段中的@Groups批注轻松地完成您要的操作序列化过程。
Book.php
use JMS\Serializer\Annotation\Groups;
class Book {
/** @Groups({"Concise"}) */
private $id;
/** @Groups({"Concise"}) */
private $name;
/** @Groups({"Concise"}) */
private $authors;
...
}
如果仅在序列化图书实体时要检索作者的姓名,请在名称字段上仅添加@Groups批注。
Author.php
use JMS\Serializer\Annotation\Groups;
class Author {
private $id;
/** @Groups({"Concise"}) */
private $name;
private $books;
...
}
然后
use JMS\Serializer\SerializerBuilder;
use JMS\Serializer\SerializationContext;
$serializer = SerializerBuilder::create()->build();
$context = SerializationContext::create()->setGroups(array('Concise'));
$json = $serializer->serialize($book, 'json', $context);