>我有一个属性为 id
和 trucknr
的实体对象。我放置了一些数据,然后查询所有数据。我使用 JMS SerializerBundle 将其序列化为 JSON,我使用 file_put_contents
将其导出到 JSON 文件,然后我使用 deserialize
读取我的 JSON 文件,它可以很好地反序列化。我使用:
$read = $serializer->deserialize($file,'ArrayCollection<AppTestBundleEntityTruck>','json');
问题是当我尝试将其保存到我的数据库时。为此,我使用了:
$em = $this->getDoctrine()->getManager();
$em->merge($read);
$em->flush();
我收到此错误:
EntityManager#merge() expects parameter 1 to be an entity object, array given.
当我在$read
上运行dump_var
时,我得到一个三行的数组集合:
array(3) { [0]=> object(AppTestBundleEntityTruck)#767 (2) { ["id":protected]=> NULL ["trucks_nr":protected]=> string(4) "1243" }
[1]=> object(AppTestBundleEntityTruck)#782 (2) { ["id":protected]=> NULL ["trucks_nr":protected]=> string(4) "3245" }
[2]=> object(AppTestBundleEntityTruck)#783 (2) { ["id":protected]=> NULL ["trucks_nr":protected]=> string(4) "5622" } }
我不知道我想要做的事情是否可能。当我查询一行时,它会持续存在或合并正常。是否可以保留对象的数组集合,如果是,如何持久化?
反序列化需要循环访问的实体数组,以便可以正确合并它们:
$em = $this->getDoctrine()->getManager();
for ($i = count($read) -1; $i >= 0; $i--) {
$em->merge($read[$i]);
}
$em->flush();
[编辑] 不确定您是否真的要使用merge()
因为您的反序列化实体似乎不是分离的,而是新的实体(因为它们没有id
)?在这种情况下,您需要改为调用persist()
。