0

我有一个具有属性的实体对象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" } }

我不知道我正在尝试做的事情是否可行。当我查询一行时,它会保持或合并正常。是否可以持久化对象的数组集合,如果可以,如何?

4

1 回答 1

1

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

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

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

于 2013-10-18T23:20:51.773 回答