Jak uzyskać zbiór w wynikach zapytania Doctrine2

Próbuję wykonać zapytanie używając doctrine2 i potrzebuję go, aby zwrócić obiekt collection.

Uproszczony fragment:

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

Zwracany obiekt jest tablicą odtwarzacza.

Informacje o formatach wyników zapytania mówią:

Wynikiem jest albo zwykła kolekcja obiektów (czysta), albo tablica, w której obiekty są zagnieżdżone w wierszach wynikowych (mieszane).

Od czego zależy Typ wyniku i jak mogę osiągnąć zdobędziesz przedmiot kolekcjonerski?

Author: AnthonyB, 2011-11-19

3 answers

getResult() zawsze zwraca tablicę. Jeśli chcesz mieć kolekcję, musisz przekazać tablicę, która jest zwracana przez getResult() do ArrayCollection

Np.

use Doctrine\Common\Collections\ArrayCollection;

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

$players = new ArrayCollection($result);
 68
Author: chriswoodford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-28 20:30:35

Ponieważ wybierasz tylko obiekty 'p' (bez pojedynczych kolumn lub wartości zagregowanych) i używasz getResult () dla trybu nawodnienia, Twoje zapytanie powinno zwracać czyste obiekty, a nie tablicę.

Domyślam się, że problem ma związek ze składnią skrótów, których używasz do budowania zapytania. Pierwszą rzeczą, którą bym spróbował, to wypisanie zapytania "long form" w ten sposób:

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

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

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

Domyśliłbym się, że Twoje skrótowe podejście będzie w porządku, ale znalazłem Doktryna być trochę wybredny, jeśli chodzi o metody chaining.

Jest kilka innych rzeczy do rozważenia w zależności od tego, jak uproszczony jest Twój fragment. Ale z mojego doświadczenia wynika, że zapytanie napisane jak pokazano zwróci obiekty gracza.

 1
Author: cantera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-19 21:50:22

Aby zwrócić obiekt zamiast tablicy, musisz użyć "częściowe Obiekty".

Oto przykład testowanego kodu https://stackoverflow.com/a/12044461/1178870

 0
Author: ismaail E.G.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:48