在 Symfony 中将实体转换为数组

新手上路,请多包涵

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

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

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

我怎样才能做到这一点?

原文由 Developer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 449
2 个回答

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

你基本上调用了 normalize 函数,它会给你你想要的:

 $entityAsArray = $this->serializer->normalize($entity, null);

我建议查看我的帖子以获取有关某些怪癖的更多信息,但这应该完全按照您的意愿进行,而无需任何其他依赖项或处理私有/受保护字段。

原文由 Skylord123 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

 <?php

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

$foo = new Foo();

$arrayFoo = (array) $foo;

var_dump($arrayFoo);

将产生 如下内容:

 array(1) {
    ["bar"]=> string(8) "barValue"
}

如果您有私有和受保护的属性,请参阅此链接: 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();
}

如果所有这些都不适合,您应该查看有关 ArrayAccess 接口的 PHP 文档。

它以这种方式检索属性: echo $entity['Attribute'];

原文由 Antoine Subit 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏