如何获得一维标量数组作为学说dql查询结果?
我想从拍卖表的id列获得一个值的数组。 如果这是一个原始的SQL,我会写:
SELECT id FROM auction 但是当我在教义中这样做,并执行:
 $em->createQuery("SELECT a.id FROM Auction a")->getScalarResult(); 
我得到这样一个数组:
 array( array('id' => 1), array('id' => 2), ) 
相反,我想获得一个这样的数组:
 array( 1, 2 ) 
我怎样才能使用教义?
PHP <5.5
 你可以使用array_map ,因为你只有每个数组的项目,你可以优雅地使用'current'作为callback,而不是写闭包 。 
 $result = $em->createQuery("SELECT a.id FROM Auction a")->getScalarResult(); $ids = array_map('current', $result); 
有关内存使用情况的更多信息,请参阅下面的Petr Sobotka的回答 。
PHP> = 5.5
 由于jcbwlkr的回答如下 ,build议使用array_column 。 
从PHP 5.5开始,你可以使用array_column来解决这个问题
 $result = $em->createQuery("SELECT a.id FROM Auction a")->getScalarResult(); $ids = array_column($result, "id"); 
 更好的解决scheme是使用PDO:FETCH_COLUMN 。 要做到这一点,你需要一个自定义的水化器: 
 //MyProject/Hydrators/ColumnHydrator.php namespace DoctrineExtensions\Hydrators\Mysql; use Doctrine\ORM\Internal\Hydration\AbstractHydrator, PDO; class ColumnHydrator extends AbstractHydrator { protected function hydrateAllData() { return $this->_stmt->fetchAll(PDO::FETCH_COLUMN); } } 
添加到Doctrine:
 $em->getConfiguration()->addCustomHydrationMode('COLUMN_HYDRATOR', 'MyProject\Hydrators\ColumnHydrator'); 
你可以像这样使用它:
 $em->createQuery("SELECT a.id FROM Auction a")->getResult("COLUMN_HYDRATOR"); 
更多信息: http : //docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#custom-hydration-modes
  Ascarius的答案是优雅的,但要小心内存使用!  array_map()创build一个传递数组的副本,并有效地增加内存使用量。 如果你使用数十万个数组项目,这可能成为一个问题。 由于PHP 5.4的调用时间通过引用已被删除,所以你不能这样做 
 // note the ampersand $ids = array_map('current', &$result); 
在这种情况下,你可以明显地去
 $ids = array(); foreach($result as $item) { $ids[] = $item['id']; } 
我认为在教义上是不可能的。 只需要使用PHP将结果数组转换为您想要的数据结构:
 $transform = function($item) { return $item['id']; }; $result = array_map($transform, $em->createQuery("SELECT a.id FROM Auction a")->getScalarResult());