Подтвердить что ты не робот

Запрос Doctrine2 возвращает массив вместо коллекции

Я пытаюсь выполнить запрос с помощью doctrine2 и ему нужно вернуть объект коллекции.

Упрощенный фрагмент:

$players = $this->getEntityManager()
    ->createQueryBuilder()
    ->select('p')
    ->from('...\Player', 'p')
    ->getQuery()
    ->getResult();

Возвращаемый объект - это массив.

Информация о форматах результатов говорит: "Результатом является либо простой набор объектов (чистый), либо массив, в котором объекты вложены в строки результатов ( смешанные)". На чем зависит тип результата и как я могу получить объект коллекции?

4b9b3361

Ответ 1

getResult() всегда возвращает массив. Если вам нужна коллекция, вы должны передать массив, возвращаемый getResult() в Doctrine ArrayCollection

например.

use Doctrine\Common\Collections;

$result = $this->getEntityManager()
    ->createQueryBuilder()
    ->select('p')
    ->from('...\Player', 'p')
    ->getQuery()
    ->getResult();

$players = new Collections\ArrayCollection($result);

Ответ 2

Поскольку вы выбираете только объекты "p" (а не отдельные столбцы или значения совокупности), и вы используете getResult() для режима гидратации, ваш запрос должен возвращать чистые объекты, а не массив.

Мое лучшее предположение заключается в том, что проблема связана с синтаксисом сокращения, который вы используете для построения запроса. Первое, что я попробую, это написать запрос "длинная форма" следующим образом:

$em = $this->getEntityManager();
$qb = $em->createQueryBuilder();

$qb->select('p')
   ->from('...\Player', 'p');

$query = $qb->getQuery();
$players = $query->getResult();

Я бы догадался, что ваш стенографический подход будет прекрасен, но я нашел Доктрину как-то изящным, когда речь заходит о цепочке методов.

Есть несколько других вещей, которые следует учитывать в зависимости от того, насколько упрощен ваш фрагмент. Но, по моему опыту, запрос, записанный как показано, вернет объекты Player.

Ответ 3

чтобы вернуть объект вместо массива, вы должны использовать "Частичные объекты".

здесь приведен пример кода проверки fooobar.com/info/215987/...