Ошибка сохраняющихся десериализованных объектов в 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()
вместо.