Как получить массив идентификаторов из коллекции Doctrine во время сериализации

Я пытаюсь 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;
}

[...]

0

Решение

Вы можете использовать @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)
{
...
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]