我想从Auction表的id列中获取一个值数组。如果这是一个原始SQL,我会写:
SELECT id FROM auction
但当我在Doctrine中这样做并执行时:
$em->createQuery("SELECT a.id FROM Auction a")->getScalarResult();
我得到一个数组,如下所示:
array(
array('id' => 1),
array('id' => 2),
)
相反,我想得到一个如下的数组:
array(
1,
2
)
我如何使用Doctrine实现这一点?
6条答案
按热度按时间cetgtptt1#
PHP〈5.5
可以使用
array_map
,因为每个数组只有一个item,所以可以优雅地使用'current'
作为回调函数,而不是编写closure。有关内存使用的其他信息,请参阅Petr Sobotka's answer below。
PHP〉= 5.5
作为jcbwlkr's answered below,推荐它使用
array_column
的方式。bkkx9g8r2#
从PHP 5.5开始,您可以使用array_column来解决此问题
7fyelxc53#
一个更好的解决方案是使用
PDO:FETCH_COLUMN
。为此,您需要一个定制的补水器:将其添加到学说:
您可以这样使用它:
更多信息:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#custom-hydration-modes
uoifb46i4#
Ascarius的回答很优雅,但是要注意内存使用!
array_map()
创建了一个传递数组的副本,有效地加倍了内存使用。如果你处理几十万个数组项,这可能会成为一个问题。由于PHP 5.4调用时引用传递已经被删除,所以你不能这样的话你可以用明显的
yizd12fk5#
从doctrine/orm 2.10.0开始,有一个内置的解决方案:
文件:https://www.doctrine-project.org/projects/doctrine-orm/en/2.10/reference/dql-doctrine-query-language.html#scalar-column-hydration
dldeef676#
我认为这在Doctrine中是不可能的。只需使用PHP将result数组转换为您想要的数据结构即可: