How to get a one-dimensional scalar array as a doctrine dql query result?
I want to get an array of values from the id column of the Auction table. If this was a raw SQL I would write:
SELECT id FROM auction
But when I do this in Doctrine and execute:
$em->createQuery("SELECT a.id FROM Auction a")->getScalarResult();
I get an array like this:
array(
array('id' => 1),
array('id' => 2),
)
Instead, i'd like to get an array like this:
array(
1,
2
)
How can I do that using Doctrine?
Solution 1:
PHP < 5.5
You can use array_map
, and since you only have on item per array, you can elegantly use
'current'
as callback, instead of writing a closure.
$result = $em->createQuery("SELECT a.id FROM Auction a")->getScalarResult();
$ids = array_map('current', $result);
See Petr Sobotka's answer below for additional info regarding memory usage.
PHP >= 5.5
As jcbwlkr's answered below, the recommended way it to use array_column
.
Solution 2:
As of PHP 5.5 you can use array_column to solve this
$result = $em->createQuery("SELECT a.id FROM Auction a")->getScalarResult();
$ids = array_column($result, "id");