Symfony2中持久反序列化对象错误

时间:2013-10-18 22:58:27

标签: json symfony jmsserializerbundle

我有一个包含属性idtrucknr的实体对象。我放置了一些数据,然后查询所有数据。 我使用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 个答案:

答案 0 :(得分:1)

您反序列化需要循环的实体数组,以便它们可以正确合并:

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

[edit]不确定你是否真的想使用merge(),因为你的反序列化实体似乎不是分离的而是新的(因为它们没有id)?在这种情况下,您需要拨打persist()