我有 2 个具有多对多关系 Author 和 Book 的实体。
现在,当我将 Book 序列化为 json 时,它为我提供了嵌套作者对象的所有字段。
{
"id": 3,
"name": "clean code",
"authors": [
{
"id": 4,
"name": "Martin Robert "
},
...
]
}
但是我如何让它只返回特定的字段,例如只返回每个作者的名字。
我尝试将组添加到作者实体,但是当我运行序列化程序时,组似乎不适用于嵌套对象,因为我得到了相同的结果。
$book=$this->serializer->normalize($book, null, ['groups' => 'Concise']);
$book=$this->serializer->serialize($book,'json');
您应该看看JMS Serializer,它是一个用于序列化对象的强大库,您可以通过配置哪些字段应该保留在序列化过程中,轻松地在实体上使用 @Groups 注释来完成您的要求。
书.php
use JMS\Serializer\Annotation\Groups;
class Book {
/** @Groups({"Concise"}) */
private $id;
/** @Groups({"Concise"}) */
private $name;
/** @Groups({"Concise"}) */
private $authors;
...
}
如果您只想在序列化图书实体时检索作者姓名,只需在姓名字段上添加@Groups 注释。
作者.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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句