Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony2][Symfony]Join bez użycia Relacji na Encjach, Przykład zapytania SQL, które chciałbym wykonać na Doctrine
adbacz
post 23.07.2015, 07:30:06
Post #1





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Mam dwie tabele: crew oraz crew_player. Player jest przypisany do Crew poprzez ID, a Crew należy do jakiegoś użytkownika. Potrzebuję wykonać poniższe zapytanie SQL za pomocą Doctrine, jednak nie zadziała to bez zrobienia relacji w encjach. A jeśli zrobię relacje, to Doctrine pobierze mi niepotrzebnie rekord z tabeli crew, który jest mi niepotrzebny. Jak w takim razie można to obejść, bym mógł pobrać tylko rekord z tabeli crew_player?

  1. SELECT p.*
  2. FROM player p
  3. INNER JOIN player_crew c
  4. ON ( p.crew_id = c.id )
  5. WHERE ( c.owner = "$userId" )
  6. LIMIT 1

(zapytanie podglądowe, nie sprawdzałem jego działania)
Go to the top of the page
+Quote Post
Forti
post 23.07.2015, 08:41:39
Post #2





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


Co znaczy "pobierze nie potrzebne dane"? Jak nie zrobisz join to nie pobierze.

Doctrine jest ograniczony (DQL). Albo zrób to w nativ SQL albo pogódź się z tym że musisz mieć zmapowaną relacje. To twoje inner join ... on ... się nie sprawdzi ponieważ wywali błąd - musi być WITH i wówczas będziesz musiał ręcznie mapować, ponieważ otrzymasz coś takiego:

  1. $result = [
  2. 0 => [
  3. 'name' => 'nazwa',
  4. 'joined_record' => 1
  5. ],
  6. 1 => [
  7. 'name' => 'tutaj bedzie joined_record'
  8. ]
  9. ];


Mam nadzieje że rozumiesz wink.gif Sam się sporo z tym męczyłem i tego nie przeskoczysz. Albo SQL albo relacja.

Ten post edytował Forti 23.07.2015, 08:42:17


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post
adbacz
post 23.07.2015, 15:32:19
Post #3





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Pierwsze słysze o użyciu WITH w zapytaniu. Co w podanym przeze mnie przykładzie wyrzuci błąd? Od zawsze robię takie w tym kontekście i nie miałem z nimi problemu.

Podczas używania Native SQL można podpiąć Encję Doctrine jako rezultat zapytania, by zwróciło kolekcję obiektów zamiast kolekcji tablic?
Go to the top of the page
+Quote Post
Forti
post 23.07.2015, 16:33:35
Post #4





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


jakoś tak:

  1. $queryBuilder = $this->getEntityManager()
  2. ->createQueryBuilder()
  3. ->select('c')
  4. ->from('AcmeVideoBundle:Video', 'v')
  5. ->join('AcmeCategoryBundle:Category', 'c', Expr\Join::WITH, 'v.id = c.id')
  6. ->groupBy('c.id')


zamiast Expr\Join::WITH string 'WITH' również działa. Jak ustawisz 'ON' dostaniesz błąd. Gwarantuje.

edit:
nie pamiętam dokładniej treści błędu. Być może coś mieszam i jakoś to się da - z tym że na stackach wszędzie przykłady są z WITH. Błąd brzmiał mniej więcej: "unexpected ON, expected WITH"

Ten post edytował Forti 23.07.2015, 16:35:21


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post
adbacz
post 23.07.2015, 17:59:34
Post #5





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Ja sądziłem, że WITH zrobić w Native SQl a nie w QueryBuilder i stąd to niezrozumienie. Dziękuję za przykład, wszystko działa jak chciałem.
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: 19.04.2024 - 23:44