Можно ли управлять структурой возвращаемого массива с помощью QueryBuilder? - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь оптимизировать свое приложение. Мне нужно знать, возможно ли то, что я хочу сделать.

Я сделал несколько попыток, основываясь на успехе indexBy.

В настоящее время я могу изменять структуру массива результатов так, как мне нужно, через PHP.

Я хочу знать, способен ли QueryBuilder сделать это для меня и как (если это возможно).

Вот построение запроса:

return $this->createQueryBuilder('a')
                        ->select('SUBSTRING(a.creationDate, 1,4) year, TRIM(LEADING \'0\' FROM SUBSTRING(a.creationDate, 6,2)) month, COUNT(a) number')
                        ->where('a.creationDate > :limitDate')
                        ->groupBy('year')
                        ->addGroupBy('month')
                        ->orderBy('year', 'ASC')
                        ->addOrderBy('month', 'ASC')
                        ->setParameter('limitDate', new \DateTime("2000-01-01 00:00:00") )
                        ->getQuery()
                        ->getArrayResult();

Вот фактический результат запроса:

Array (
    [0] => Array ( [year] => 2016 [month] => 10 [number] => 96 ) 
    [1] => Array ( [year] => 2016 [month] => 11 [number] => 159 ) 
    [2] => Array ( [year] => 2016 [month] => 12 [number] => 118 ) 
    [3] => Array ( [year] => 2016 [month] => 9 [number] => 47 ) 
    [4] => Array ( [year] => 2017 [month] => 1 [number] => 44 ) 
    [5] => Array ( [year] => 2017 [month] => 10 [number] => 47 )
    ...
)

Вот код PHP, который я использую для изменения массива, как я хочу:

$myRestructuredArray = [];
foreach($myArray as $line)
{
    $myRestructuredArray [$line['year']][$line['month']] = $line['number'];
}

Вот результат, который мне нужен:

Array (
    [2016] => Array ( 
        [10] => 96 
        [11] => 159 
        [12] => 118 
        [9] => 47 ) 
    [2017] => Array ( 
        [1] => 44 
        [10] => 47 
    ...
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...