我必须帮助我将实体转换为数组,但我有解决相关记录的问题,这是我需要的。
然而,这给了我一个错误
在“。”中找不到“Doctrine \ ORM \ PersistentCollection”类 链配置的命名空间......
代码如下:
public function serialize($entityObject)
{
$data = array();
$className = get_class($entityObject);
$metaData = $this->entityManager->getClassMetadata($className);
foreach ($metaData->fieldMappings as $field => $mapping)
{
$method = "get" . ucfirst($field);
$data[$field] = call_user_func(array($entityObject, $method));
}
foreach ($metaData->associationMappings as $field => $mapping)
{
// Sort of entity object
$object = $metaData->reflFields[$field]->getValue($entityObject);
if ($object instanceof ArrayCollection) {
$object = $object->toArray();
}
else {
$data[$field] = $this->serialize($object);
}
}
return $data;
}
如何将相关字段解析为各自的数组。
我尝试过使用内置和JMS序列化程序,但是这给了我嵌套限制的问题,所以这不是我的选择。
更新: 我根据@ ScayTrase的建议更新了代码以处理ArrayCollection的实例。但是,仍然会使用一对多字段映射报告上述错误。在debug中,变量$ object的类型为“Doctrine \ ORM \ PersistentCollection”
答案 0 :(得分:1)
对于使用*toMany
实施的ArrayCollection
关联属性,您应首先调用ArrayCollection::toArray()
。只需使用instanceof
进行检查,就像这样
if ($object instanceof ArrayCollection) {
$object = $object->toArray();
}