我正在尝试从实体获取多维数组。
Symfony Serializer已经可以转换为XML,JSON,YAML等,但不能转换为数组。
我需要转换,因为我想要一个干净的var_dump
。我现在拥有几乎没有连接的实体,而且完全不可读。
我怎样才能做到这一点?
答案 0 :(得分:5)
显然,可以将对象强制转换为如下所示的数组:
<?php
class Foo
{
public $bar = 'barValue';
}
$foo = new Foo();
$arrayFoo = (array) $foo;
var_dump($arrayFoo);
这个will produce类似于:
array(1) {
["bar"]=> string(8) "barValue"
}
如果您拥有私有和受保护的属性,请参阅以下链接:https://ocramius.github.io/blog/fast-php-object-to-array-conversion/
在您的EntityRepository中,您可以选择您的实体并指定您希望使用getArrayResult()
方法的数组
有关更多信息,请参阅Doctrine query result formats documentation。
public function findByIdThenReturnArray($id){
$query = $this->getEntityManager()
->createQuery("SELECT e FROM YourOwnBundle:Entity e WHERE e.id = :id")
->setParameter('id', $id);
return $query->getArrayResult();
}
如果所有不合适的话,请参阅有关ArrayAccess界面的PHP文档
它以这种方式检索属性:echo $entity['Attribute'];
答案 1 :(得分:2)
您实际上可以使用内置的序列化程序将教义实体转换为数组。实际上,我今天刚刚写了一篇关于此的博客文章: https://skylar.tech/detect-doctrine-entity-changes-without/
您基本上调用了normalize函数,它将为您提供所需的内容:
$entityAsArray = $this->serializer->normalize($entity, null);
我建议检查我的帖子以获取有关某些怪癖的更多信息,但这应该可以完全满足您的要求,而无需任何其他依赖项或处理私有/受保护的字段。