Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Symfony Doctrine - zamiana wyniku zapytania na encje
marekm10
post 20.06.2019, 10:46:51
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 23.10.2016

Ostrzeżenie: (0%)
-----


Cześć
piszę sobie coś w Symfony 4 z Doctrine i mam taką sytuację, że optymalniej wydaje mi się napisać zapytanie samemu przy użyciu query buildera, niż zdać się na automatyczne wyciąganie. Są dwie encje, które trzeba połączyć po to, aby wyjąć dane z 3 tabeli - w sumie to nieistotne teraz. Mam klasę repozytorium encji i w jednej z metod kod:
  1. $this->createQueryBuilder('u')
  2. ....
  3. ->select('u.id')
  4. ->getQuery()
  5. ->getResult();


Moje pytanie jest takie: jak zamienić wynik tego zapytania na encję? Otrzymuję na ten moment zwykłą tablicę z id, a chciałbym dostać tablicę (czy też kolekcję) encji z podstawionymi już wartościami pod odpowiednie pola (na razie jest to tylko id testowo, docelowo będzie więcej). Nie za bardzo wyobrażam sobie, aby trzeba było ręcznie robić pętlę, która po wszystkim przejdzie i przypisywać każdą wartość pojedynczo - pewnie można to zrobić lepiej. Szukałem, czytałem dokumentację Doctrine w sekcji o mappingu (nie wiem czy to to), ale nie mogę znaleźć tego, o co mi chodzi (albo źle szukam). Dotarłem do klasy typu ResultSetMappingBuilder, ale nawet nie wiem czy to jest od tego, a jak jest to gdzieś widziałem metody oczekujące czystego kodu SQL, a ja aż tak nisko schodzić nie potrzebuję, query builder mi wystarczy.

Proszę o pomoc i poradę pod jakimi hasłami tego szukać, gdzie szukać albo ewentualnie o jakiś przykładowy kod.
Go to the top of the page
+Quote Post
ohm
post 20.06.2019, 11:49:47
Post #2





Grupa: Zarejestrowani
Postów: 618
Pomógł: 143
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


Hm, a co z ->select("u") ?
Go to the top of the page
+Quote Post
marekm10
post 20.06.2019, 12:27:31
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 23.10.2016

Ostrzeżenie: (0%)
-----


Ok, jest to jakis krok, nie sądziłem, że to aż tak proste. Z tym że nie rozwiązuje do końca mojego problemu, bo w drugim zapytaniu mam jeszcze joina i tam potrzebuję wybrać to co jest pod relacją jako encję tej relacji.

  1. this->createQueryBuilder('om')
  2. ->join('om.user', 'u', Join::WITH, 'om.u_id = 5')
  3. ->select('u')
  4. ->getQuery()
  5. ->getResult();


Teraz chcąc zrobić select('om') jest ok, zwraca encje od om. Ale gdy chcę zrobić select('om.user') wtedy dostaję błąd:
> Error: Invalid PathExpression. Must be a StateFieldPathExpression

A gdy próbuję samo select('u')
> Error: Cannot select entity through identification variables without choosing at least one root entity alias.

jak sobie z tym poradzić?
Go to the top of the page
+Quote Post
ohm
post 20.06.2019, 13:28:31
Post #4





Grupa: Zarejestrowani
Postów: 618
Pomógł: 143
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


powinno pomoc select('om, u'),
Go to the top of the page
+Quote Post
marekm10
post 20.06.2019, 16:59:19
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 23.10.2016

Ostrzeżenie: (0%)
-----


Faktycznie, zadziałało, z tym że niepotrzebnie dodatkowo wyciąga wtedy dane om, robi ich tablicę i dopiero na każdym om trzeba wywołać metodę, aby dostać u. O tyle dobrze, że wszystko idzie w jednym zapytaniu.
Znalazłem przed chwilą jeszcze radę, aby dodać drugą encję jako ->from('encja', 'u') + odpowiedni warunek łączący jak przy joinie i wtedy w select można dać samo 'u' i działa.
Dzięki za pomoc
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 15:01