我有一个包含属性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" } }
我不知道我想做的事情是否可行。当我查询一行时,它会持续存在或合并得很好。是否可以持久化对象的数组集合,如果是,如何?
答案 0 :(得分:1)
您反序列化需要循环的实体数组,以便它们可以正确合并:
$em = $this->getDoctrine()->getManager();
for ($i = count($read) -1; $i >= 0; $i--) {
$em->merge($read[$i]);
}
$em->flush();
[edit]不确定你是否真的想使用merge()
,因为你的反序列化实体似乎不是分离的而是新的(因为它们没有id
)?在这种情况下,您需要拨打persist()
。