Ошибка сохраняющихся десериализованных объектов в Symfony2

У меня есть объект сущности со свойствами id а также trucknr, Я помещаю несколько данных, а затем запрашиваю все. Я использую JMS SerializerBundle для сериализации этого в JSON, и я использую file_put_contents чтобы экспортировать это в файл JSON, то я использую deserialize читать мой файл JSON, и он отлично десериализуется. Я использую:

$read = $serializer->deserialize($file,'ArrayCollection<App\TestBundle\Entity\Truck>','json');

Проблема в том, что я пытаюсь сохранить это в своей базе данных. Для этого я использовал:

$em = $this->getDoctrine()->getManager();
$em->merge($read);
$em->flush();

Я получаю эту ошибку:

EntityManager#merge() expects parameter 1 to be an entity object, array given. 

когда я бегу dump_var на $read Я получаю массив из трех строк:

array(3) { [0]=> object(App\TestBundle\Entity\Truck)#767 (2) { ["id":protected]=> NULL ["trucks_nr":protected]=> string(4) "1243" } 
[1]=> object(App\TestBundle\Entity\Truck)#782 (2) { ["id":protected]=> NULL ["trucks_nr":protected]=> string(4) "3245" } 
[2]=> object(App\TestBundle\Entity\Truck)#783 (2) { ["id":protected]=> NULL ["trucks_nr":protected]=> string(4) "5622" } }

Я не знаю, возможно ли то, что я пытаюсь сделать. Когда я запрашиваю одну строку, она сохраняется или сливается нормально. Можно ли сохранить массив объектов коллекции, и если да, то как?

1 ответ

Решение

Вы десериализуете массив сущностей, которые вам нужно перебрать, чтобы их можно было правильно объединить:

$em = $this->getDoctrine()->getManager();
for ($i = count($read) -1; $i >= 0; $i--) {
    $em->merge($read[$i]);
}
$em->flush();

[править] Не уверен, если вы действительно хотите использовать merge() поскольку ваши десериализованные сущности кажутся не отделенными, а скорее новыми (так как у них нет id)? В этом случае вам нужно позвонить persist() вместо.

Другие вопросы по тегам