Как я могу выбрать количество (поле) и по-прежнему получать объект с помощью createQueryBuilder

Я хочу получить доступ к результату запроса в ветке как к целому объекту. Однако в запросе я хочу выбрать только несколько полей из таблиц + count. В моем примере у меня есть компания, которая принадлежит владельцу и имеет несколько сотрудников. Я хочу создать запрос, который дает мне список компаний, упорядоченных по количеству их сотрудников.

$qb = $this->createQueryBuilder('c');
$qb->select('count(e.id), partial c.{id, name}, partial o.{id, name}');
$qb->leftJoin('c.employees', 'e');
$qb->innerJoin('c.owner', 'o');
$qb->groupBy('c.id');

Запрос работает нормально, однако я получаю сообщение об ошибке, когда хочу получить доступ к другим объектам, которые нравятся обычно в объекте компании (есть набор объектов изображения, и каждый объект изображения содержит путь к изображению). Запрос не загружает весь объект компании с его зависимостями... Я не могу получить доступ к методу "firstImage", который возвращает первое изображение из коллекции. я получаю эту ошибку

Ключ "firstImage" для массива с ключами "0, 1" не существует в MyBundle:List:results.html.twig в строке 6

Обратите внимание, что без учета «количества сотрудников» все работает.

$qb = $this->createQueryBuilder('c');
$qb->select('partial c.{id, name}, partial o.{id, name}');
$qb->leftJoin('c.employees', 'e');
$qb->innerJoin('c.owner', 'o');
$qb->groupBy('c.id');

person Andrej Sramko    schedule 22.03.2014    source источник


Ответы (1)


Ваш объект будет первым элементом массива результатов, а значение count() будет вторым. Вы можете получить доступ к свойствам и методам объекта в twig следующим образом:

{{ object[0].firstImage }}
{{ object[0].name }}

И количество сотрудников можно получить как:

{{ object[1] }}

Также вы можете определить имя для вашего значения count() в запросе

$qb->select('count(e.id) AS empQty, partial c.{id, name}, partial o.{id, name}');

а затем вы можете получить доступ к этому значению в ветке как:

{{ object['empQty'] }}
person Revinand    schedule 23.03.2014