我正在尝试从实体获取多维数组。
Symfony Serializer已经可以转换为XML、JSON、YAML等,但不能转换为数组。
我需要转换,因为我想有一个干净的var_dump
。我现在有一些连接的实体,是完全不可读的。
我如何才能做到这一点?
我正在尝试从实体获取多维数组。
Symfony Serializer已经可以转换为XML、JSON、YAML等,但不能转换为数组。
我需要转换,因为我想有一个干净的var_dump
。我现在有一些连接的实体,是完全不可读的。
我如何才能做到这一点?
4条答案
按热度按时间lg40wkob1#
实际上,你可以使用内置的序列化器将doctrine实体转换成数组。我今天刚刚写了一篇关于这个的博客文章:https://skylar.tech/detect-doctrine-entity-changes-without/
你只需调用normalize函数,它就会给予你想要的结果:
我建议查看我的帖子以获得更多关于一些怪癖的信息,但是这应该完全按照你的要求来做,没有任何额外的依赖关系或者处理私有/受保护的字段。
pod7payv2#
显然,可以将对象转换为数组,如下所示:
这个will produce类似于:
如果您有私有和受保护的属性,请查看此链接:https://ocramius.github.io/blog/fast-php-object-to-array-conversion/
从存储库查询中获取数组格式的实体
在你的EntityRepository中你可以选择你的实体并指定你想要一个带有
getArrayResult()
方法的数组。有关详细信息,请参阅Doctrine查询结果格式文档。
如果所有这些都不合适,你应该去看看关于ArrayAccess接口的PHP文档。
它会以下列方式撷取属性:
echo $entity['Attribute'];
个nbnkbykc3#
我遇到了同样的问题,试了另外两个答案,都不是很顺利。
$object = (array) $object;
在我的键名中添加了很多额外的文本。active
属性,因为它前面没有is
,而是一个boolean
。它还更改了我的数据的序列和数据本身。所以我在我的实体中创建了一个新函数:
我基本上将所有属性添加到了新的
$user
数组中,并创建了一个额外的$ignores
变量,以确保可以忽略属性(以防您不需要所有属性)。您可以在控制器中按如下方式使用此功能:
uurv41yg4#
PHP 8允许我们将对象转换为数组:
对象必须只有公共属性,否则会得到奇怪的数组键:
输出如下:
与Serialiser规范化相比,此方法有一个好处--通过这种方式,您可以将Object转换为对象数组,而不是数组的数组。