2013-10-18 47 views
0

我有一個實體對象,其屬性爲idtrucknr。我放置了一些數據,然後查詢所有數據。 我使用JMS SerializerBundle將其序列化爲JSON,並且我使用file_put_contents將其導出爲JSON文件,然後使用deserialize來讀取我的JSON文件,並且它反序列化正常。 我使用:在Symfony2中持久反序列化的對象錯誤

$read = $serializer->deserialize($file,'ArrayCollection<App\TestBundle\Entity\Truck>','json'); 

問題是,當我試圖堅持這一到我的數據庫。對於我所用:當我在$read運行dump_var

EntityManager#merge() expects parameter 1 to be an entity object, array given. 

我得到的三排的陣列集合:

$em = $this->getDoctrine()->getManager(); 
$em->merge($read); 
$em->flush(); 

我得到這個錯誤

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()

+0

我一直在玩合併和堅持。我實際上想要根據唯一字段更新實體。所以如果我的領域已經使用它應該合併,如果不是它應該更新。我使用ID進行測試如果我使用ID序列化並使用合併,它會使用我的新值更新那些使用的ID。但如果我的JSON有新的ID和使用ID,當我使用合併時出現錯誤。並堅持似乎創造新的對象。 – Don