2013-03-06 64 views
2

我有一個實體與oneToMany的關係,我可以得到相關的項目使用;Doctrine2,PersistentCollection和JMS串行器

$this->getQueuedItems() 

這將返回學說\ ORM \ PersistentCollection對象,我再路過這JMS Serializer像這樣;

$serializer = $container->get('serializer'); 
$json = $serializer->serialize($this->getQueuedItems(), 'json'); 

但是輸出使用var_dump()導致$json;

串(2) 「[]」

哪個是錯誤的。那裏有數據,因爲如果我通過foreach()而不是$this->getQueuedItems()獲得數據。

如何使用JMS串行器將Doctrine \ ORM \ PersistentCollection連載到JSON中?

由於

回答

2

的PersistentCollection對象是一個Iterator骨料而不是陣列。區別在於迭代器是可以迭代的對象,因此可能包含也可能不包含在任何時候序列化到數組所需的數據。

要序列集合爲JSON,請嘗試以下操作:

$serializer = $container->get('serializer'); 
$arr  = $this->getQueuedItems()->toArray(); 
$json  = $serializer->serialize($arr, 'json'); 

如果你不是太大驚小怪的鑰匙,你也可以使用getValues,而不是toArray

+0

謝謝@hobnob,我現在一定已經繞過這個方向,但是感謝您的意見。 – 2013-07-23 15:59:54

+0

@JakeN如果可以的話,請發佈你如何解決它。在one2many序列化給出的答案是沒有幫助的。 – Oshanz 2015-11-02 10:29:39

+0

現在看看我的代碼,我甚至不使用'toArray'。你可能想嘗試這個包,因爲它爲你的關係https://github.com/FriendsOfSymfony/FOSRestBundle – 2015-11-02 11:51:40