2014-04-03 113 views
0

我使用Zend框架的2学说2.这是我的问题ZF2和学说2转换的结果集,以阵列

以下对象返回数组

$results = $em->getRepository('MyProject\Domain\User')->find($id); 

返回:

array (size=4) 
    0 => 
    object(My\Entity\User)[3] 
     private 'id' => int 1 
     private 'firstName' => string 'joe' (length=3) 
     private 'lastName' => string 'smith' (length=5) 
    1 => 
     object(My\Entity\User)[3] 
     private 'id' => int 1 
     private 'firstName' => string 'joe' (length=3) 
     private 'lastName' => string 'smith' (length=5) 
    3 => 
    object(My\Entity\User)[3] 
     private 'id' => int 1 
     private 'firstName' => string 'joe' (length=3) 
     private 'lastName' => string 'smith' (length=5) 
    4 => 
     object(My\Entity\User)[3] 
     private 'id' => int 1 
     private 'firstName' => string 'joe' (length=3) 
     private 'lastName' => string 'smith' (length=5) 

我想将它转换为像这样的阵列阵列:

array (size=4) 
     0 => 
     array (size=3) 
     ['id'] => int 1 
     ['firstName'] => string 'joe' (length=3) 
     ['lastName'] => string 'smith' (length=5) 
     1 => 
     array (size=3) 
     ['id'] => int 1 
     ['firstName'] => string 'joe' (length=3) 
     ['lastName'] => string 'smith' (length=5) 
     2 => 
     array (size=3) 
     ['id'] => int 1 
     ['firstName'] => string 'joe' (length=3) 
     ['lastName'] => string 'smith' (length=5) 
     3 => 
     array (size=3) 
     ['id'] => int 1 
     ['firstName'] => string 'joe' (length=3) 
     ['lastName'] => string 'smith' (length=5) 

我曾尝试以下:

$resultsArray = new \Doctrine\Common\Collections\ArrayCollection($results); 
$resultsArray->toArray(); 

$resultsArray = new \Zend\Stdlib\ArrayObject($results); 
$resultsArray->getArrayCopy(); 

两个返回此:

array (size=4) 
    0 => 
    object(My\Entity\User)[3] 
     private 'id' => int 1 
     private 'firstName' => string 'joe' (length=3) 
     private 'lastName' => string 'smith' (length=5) 
    1 => 
     object(My\Entity\User)[3] 
     private 'id' => int 1 
     private 'firstName' => string 'joe' (length=3) 
     private 'lastName' => string 'smith' (length=5) 
    3 => 
    object(My\Entity\User)[3] 
     private 'id' => int 1 
     private 'firstName' => string 'joe' (length=3) 
     private 'lastName' => string 'smith' (length=5) 
    4 => 
     object(My\Entity\User)[3] 
     private 'id' => int 1 
     private 'firstName' => string 'joe' (length=3) 
     private 'lastName' => string 'smith' (length=5) 

我怎样才能做到这一点?推荐的方法是什么?

回答

1

最简单的形式,下面是你想要

$qb = $em->getRepository('My\Entity\User')->createQueryBuilder('User'); 

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

通常你会使用一个定制的仓库,添加您的DQL查询,方法是描述在这里文档什么

http://docs.doctrine-project.org/en/2.0.x/tutorials/getting-started-xml-edition.html#entity-repositories

+0

谢谢,但我想利用findBy *方法 –

+0

@TeodorTalov很棒,但这些方法不会给你想要的结果。即使入门教程描述了编写DQL以完成工作https:// doctrine -orm.readthedocs.org/en/latest/tutorials/getting-started.html#array-hydration-of-the-bug-list – Crisp

0

另一种方式来编写它,我用:

//at the top of custom repository class 
use Doctrine\Orm\Query; 

//in the method 
$dql = "SELECT u FROM MyProject\Domain\User u WHERE u.id = $id" 
$query = $entityManager->createQuery($dql); 
$users = $query->getResult(Query::HYDRATE_ARRAY); 
//knowing the code you provided, this should give you an array of four arrays