在Symfony中将实体转换为数组

Dev*_*per 2 php symfony doctrine-orm

我正试图从实体中获取一个多维数组.

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

我需要转换,因为我想干净var_dump.我现在有几个连接的实体,完全不可读.

我怎样才能做到这一点?

Sky*_*123 13

您实际上可以使用内置序列化器将学说实体转换为数组。实际上我今天刚刚写了一篇关于此的博客文章: https ://skylar.tech/detect-doctrine-entity-changes-without/

您基本上调用标准化函数,它会给您您想要的:

$entityAsArray = $this->serializer->normalize($entity, null);
Run Code Online (Sandbox Code Playgroud)

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


Ant*_*bit 5

显然,可以将对象强制转换为如下所示的数组:

<?php

class Foo
{
    public $bar = 'barValue';
}

$foo = new Foo();

$arrayFoo = (array) $foo;

var_dump($arrayFoo);
Run Code Online (Sandbox Code Playgroud)

将产生类似于:

array(1) {
    ["bar"]=> string(8) "barValue"
}
Run Code Online (Sandbox Code Playgroud)

如果您有私有和受保护的属性,请访问以下链接:https://ocramius.github.io/blog/fast-php-object-to-array-conversion/

从存储库查询中获取数组格式的实体

在您的EntityRepository中,您可以选择您的实体并指定您想要一个带getArrayResult()方法的数组.
有关更多信息,请参阅Doctrine查询结果格式文档.

public function findByIdThenReturnArray($id){
    $query = $this->getEntityManager()
        ->createQuery("SELECT e FROM YourOwnBundle:Entity e WHERE e.id = :id")
        ->setParameter('id', $id);
    return $query->getArrayResult();
}
Run Code Online (Sandbox Code Playgroud)

如果所有这些都不合适,请参阅有关ArrayAccess接口的PHP文档.
它以这种方式检索属性:echo $entity['Attribute'];