2013-03-06 69 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