Zend framework 如何将Doctrine2结果对象作为关联数组获取?

Zend framework 如何将Doctrine2结果对象作为关联数组获取?,zend-framework,doctrine,doctrine-orm,Zend Framework,Doctrine,Doctrine Orm,我有一个简单的实体,它是一个保存用户数据的表 我想获取特定用户的所有列作为一个数组,然后对它们进行json_编码,但我得到的是一个实体对象,我必须对每个值使用get方法。我只需要一个用户表值的关联数组。 我尝试过但不起作用的代码(返回的实体对象)如下所示: 一, 二, PS:我正在使用z2d2项目,这是doctrine2与Zend框架的集成。当您执行$accounts=$qb->getQuery()->getResult()时传递给getResult的参数告诉它如何生成将返回的结果集 阵列水化

我有一个简单的实体,它是一个保存用户数据的表 我想获取特定用户的所有列作为一个数组,然后对它们进行json_编码,但我得到的是一个实体对象,我必须对每个值使用get方法。我只需要一个用户表值的关联数组。 我尝试过但不起作用的代码(返回的实体对象)如下所示: 一,

二,


PS:我正在使用z2d2项目,这是doctrine2与Zend框架的集成。

当您执行
$accounts=$qb->getQuery()->getResult()时传递给getResult的参数告诉它如何生成将返回的结果集

阵列水化

如果需要数组,则应传递数组hydrations的
常量
doctor\ORM\Query::hydration\u array

$accounts=$qb->getQuery()->getResult(条令\ORM\Query::水合物数组)

如果您使用的是
findOneBy()
,那么它将始终返回一个实体。由于find的工作原理,除了返回实体之外,您不能告诉它通过任何其他方式进行水合

在此场景中,您需要做的是在实体内部创建一个
getValues()
方法,该方法返回实体的数组,如下所示:

 public function getSimpleValues(){
     return array(
        'id'      => $this->getId(),
        'lft'     => $this->getLft(),
        'rgt'     => $this->getRgt(),
        'name'    => $this->getName(),
        'md5Name' => $this->getMd5Name(),              
        'owner'   => $this->getOwner()->getId(),
        'etag'    => $this->getEtag()
    );
}

API文档:

您还可以使用getArrayResult()作为传递常数以获取数组的快捷方式:

$accounts = $qb->getQuery()->getArrayResult();

您应该使用包含值2的常量,它是内置的,您可以在查询的最后部分这样做

$qb->getQuery()->getResult( Doctrine\ORM\Query::HYDRATE_ARRAY );

感谢您快速准确的回复。不同水合模式的常量是:Query::hydroge\u OBJECT Query::hydroge\u ARRAY Query::hydroge\u SCALAR Query::hydroge\u SINGLE\u SCALAR如果我想使用像
$this->doctrine->em->find('Entity\User',5)
?这是我的问题,这不是问题的答案。
$accounts = $qb->getQuery()->getArrayResult();
$qb->getQuery()->getResult( Doctrine\ORM\Query::HYDRATE_ARRAY );
$data = $this->entity->findOneBy(array('key' => $value));

$hydrator = new \DoctrineModule\Stdlib\Hydrator\DoctrineObject($this->_em, $entity_name);

$array = $hydrator->extract($data);