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?
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);
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.
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
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