EXPERTS

Чистые и смешанные результаты

Результат, возвращаемый запросом DQL SELECT, полученным с помощью Query#getResult() или Query#getArrayResult(), может быть чистым (pure) и смешанным (mixed). По умолчанию тип результата является чистым, но как только скалярные значения, такие как агрегатные значения или другие скалярные значения, которые не принадлежат сущности, появляются в конструкции SELECT запроса DQL, результат становится смешанным.

Пример чистого результата:

SELECT u FROM User u

array
    [0] => Object
    [1] => Object
    [2] => Object
    ...

Смешанный результат имеет структуру, отличную от чистого результата.

Соглашения для смешанных результатов следующие:

Пример смешанного результата:

SELECT u, 'некоторая скалярная строка', count(g.id) AS num
FROM User u
JOIN u.groups g
GROUP BY u.id

array
    [0]
        [0] => Object
        [1] => "некоторая скалярная строка"
        ['num'] => 2
        // ... еще скалярные значения
    [1]
        [0] => Object
        [1] => "некоторая скалярная строка"
        ['num'] => 5
        // ... еще скалярные значения 

Чтобы лучше понять смешанные результаты, рассмотрим следующий запрос DQL:

SELECT u, UPPER(u.name) nameUpper FROM App\Entity\User u

Этот запрос использует функцию UPPER DQL, которая возвращает скалярное значение, и, поскольку теперь в предложении SELECT есть скалярное значение, мы получаем смешанный результат:

array
    array
        [0] => User (Object)
        ['nameUpper'] => "ИМЯ ПОЛЬЗОВАТЕЛЯ"
    array
        [0] => User (Object)
        ['nameUpper'] => "ИМЯ ДРУГОГО ПОЛЬЗОВАТЕЛЯ"
    ...