Как управлять десериализованными сущностями с помощью менеджера сущностей?

Я использую JMSSerializerBundle для сериализации своих сущностей для json и десериализации json в сущности, но я думаю, что этот вопрос применим для любых методов десериализации.

Например, эта схема:

class Order
{
    private $id;

    /**
     * @Serializer\Type("ArrayCollection<MyBundle\Entity\Order\Item>")
     * @ORM\OneToMany(targetEntity="\MyBundle\Entity\Order\Item", mappedBy="order", cascade={"persist"})
     */
    private $items;
}

class Item
{

    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="\MyBundle\Entity\Order", inversedBy="items")
     */
    private $order;

    /**
     * @var integer $amount
     * @Serializer\Type("integer")
     * @ORM\Column(name="amount", type="integer")
     */
    private $amount;

}

Карты к этому JSON:{"id":1,"items":[{"id":1,"amount":100}, {"id":2,"amount":200}]} и тот же самый JSON должным образом десериализован в объект типаMyBundle:Order у которого есть коллекция из двухMyBundle:Order/Item объекты.

Проблема в том, что когда я пытаюсь сохранить этот объект, в базе данных создаются новые записи, а не обновляются существующие, игнорируя идентификаторы. Как мне сказать менеджеру сущностей, что эти объекты должны быть обновлены, а не созданы?

Update, В общем, решение EntityManager :: merge (как предлагает DaveM) - это хорошо. Но вы должны только объединить существующие объекты. Например, если у вас есть json, который представляет новую сущность Order, связанную с существующими сущностями Order \ Item

{"id":null,"items":[{"id":1,"amount":100}, {"id":2,"amount":200}]}

В этом случае вы не можете просто объединить объект Order следующим образом: $em->merge($order)потому что order - это новая сущность, а менеджер сущностей попытается найти объект Order с id = null, и вы получите новый Order и массив пустых элементов. Поэтому решение состоит в том, чтобы зациклить массив Order :: $ items и объединить каждый элемент по отдельности. Затем будет создан новый заказ и связан с существующими элементами.

Ответы на вопрос(2)

Ваш ответ на вопрос