在Symfony中将实体转换为数组

时间:2014-02-21 13:20:18

标签: php symfony doctrine-orm

我正在尝试从实体获取多维数组。

Symfony Serializer已经可以转换为XML,JSON,YAML等,但不能转换为数组。

我需要转换,因为我想要一个干净的var_dump。我现在拥有几乎没有连接的实体,而且完全不可读。

我怎样才能做到这一点?

2 个答案:

答案 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);

我建议检查我的帖子以获取有关某些怪癖的更多信息,但这应该可以完全满足您的要求,而无需任何其他依赖项或处理私有/受保护的字段。