In my Repository class I use the following code to query:
$query = $this->getEntityManager()->createQuery("
SELECT s.term, COUNT(s.term) AS freq
FROM App\Entities\SearchTerm s
GROUP BY s.term
ORDER BY s.term ASC
");
$result = $query->getResult();
The result I get is something like:
array (size=4)
0 =>
array (size=2)
'term' => string '' (length=0)
'freq' => string '1' (length=1)
1 =>
array (size=2)
'term' => string 'foo' (length=3)
'freq' => string '1' (length=1)
2 =>
array (size=2)
'term' => string 'bar' (length=3)
'freq' => string '2' (length=1)
3 =>
array (size=2)
'term' => string 'baz' (length=3)
'freq' => string '2' (length=1)
But I would rather have an associative array as a result:
array (size=4)
'' => string '1' (length=1)
'foo' => string '1' (length=1)
'bar' => string '2' (length=1)
'baz' => string '2' (length=1)
Is this possible without an extra for-loop to build the desired array?
Actually somewhere the transposition has to be done. See 14.7.4. Hydration Modes about what is returned by
->getResult()
and which alternatives modes/variants already exist.You can also add your own hydration mode at a central place. That is explained in 14.7.4.5. Custom Hydration Modes.
After lot of search I have found some solutions for doctrine object to array conversion. When we have associated objects in result.
1.
2.
3.
If you want an array you can use the
getArrayResult
method.So using this method will give you the exact same result as using the constant
HYDRATE_ARRAY
.I know its old but today I had to do almost the same, my solution without a custom hydrator
like
or
as