如何将Doctrine2结果对象作为关联数组?

Meh*_*nai 19 doctrine zend-framework doctrine-orm

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

$qb = $this->em->createQueryBuilder();
$qb->add('select', 'a')
->add('from', 'Entities\Adminprofile a')
->add('where', 'a.userid = 3333');
$accounts = $qb->getQuery()->getResult();
Run Code Online (Sandbox Code Playgroud)

2.

$account = $this->em->getRepository('Entities\Adminprofile')->findOneBy(
array('userid' => '3333'));
Run Code Online (Sandbox Code Playgroud)

PS:即时通讯使用z2d2 Project,这是doctrine2集成到Zend框架中.

Lay*_*yke 36

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

阵列水合作用

如果你想要数组,那么你应该传递CONSTANTfor数组水化Doctrine\ORM\Query::HYDRATE_ARRAY.

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

如果您正在使用findOneBy()它,它将始终返回一个实体.由于查找工作的内部结构,除了返回实体之外,您无法通过任何其他方式告诉它进行水合作用.

在这种情况下,您需要做的是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()
    );
}
Run Code Online (Sandbox Code Playgroud)

Hydration API Docs:http://www.doctrine-project.org/api/orm/2.1/namespace-Doctrine.ORM.Internal.Hydration.html

  • 感谢快速而准确的回复.不同水合模式的常量是:Query :: HYDRATE_OBJECT Query :: HYDRATE_ARRAY Query :: HYDRATE_SCALAR Query :: HYDRATE_SINGLE_SCALAR (3认同)

Jer*_*cks 23

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

$accounts = $qb->getQuery()->getArrayResult();
Run Code Online (Sandbox Code Playgroud)


Jas*_*ngh 7

您应该使用包含值2的常量并且它是内置的,您可以在查询的结尾部分执行此操作

$qb->getQuery()->getResult( Doctrine\ORM\Query::HYDRATE_ARRAY );
Run Code Online (Sandbox Code Playgroud)