Я пытаюсь json кодировать объект доктрины и вместо сериализации каждого элемента в свойстве коллекции;
Я хочу вернуть массив идентификаторов, таких как:
{«дети»:[200201],»Идентификатор»: 1}
вместо:
{«дети»:[{ «Родители»: [], «идентификатор»: 200}, { «родители»: [], «идентификатор»: 201}],»Идентификатор»: 1}
Я использую jmsserializerbundle
сериализовать объект учения
Я попытался создать виртуальное свойство и перебрать каждый элемент в свойстве коллекции, которое работает, но кажется грязным …
контроллер:
$serializer = $this->container->get('serializer');
$reports = $serializer->serialize($parent, 'json');
Сущность:
/**
* Parent
*
* @ORM\Table()
* @ORM\Entity
*/
class Parent
{
[...]
/**
* @ORM\ManyToMany(targetEntity="Children", inversedBy="parents")
* @Exclude
*/
private $children;
/**
* @VirtualProperty
* @SerializedName("children")
*/
public function getChildrenId()
{
$children= array();
foreach ($this->children $child){
$children[] = $child->getId();
}
return $children;
}
[...]
Вы можете использовать @Accessor
аннотирование указать метод, который будет использоваться при сериализации свойства, что является более чистым способом сделать это.
/**
* Parent
*
* @ORM\Table()
* @ORM\Entity
*/
class Parent
{
[...]
/**
* @ORM\ManyToMany(targetEntity="Children", inversedBy="parents")
* @Accessor(getter="getChildrenId")
*/
private $children;
public function getChildrenId()
{
$children = array();
foreach ($this->children as $child){
$children[] = $child->getId();
}
return $children;
}
[...]
Тогда вы также можете легко внедрить установщик, если вам нужно десериализовать данные.
/**
* @ORM\ManyToMany(targetEntity="Children", inversedBy="parents")
* @Accessor(getter="getChildrenId", setter="setChildrenId")
*/
private $children;
public function setChildrenId($ids)
{
...
}
Других решений пока нет …