Laravel 5.2 problem z relacją belongsToMany |
Laravel 5.2 problem z relacją belongsToMany |
18.07.2018, 11:45:33
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) |
Mam takie tabele:
i takie model:
Chciałbym z tabeli request_hr pobrać wszystkie c_id dla danego requestu tak więc mam relację belongsToMany w modelu EmploymentRequest która nazywa się hrsTakenAccess ale otrzymuję zapytanie z laravela co wygląda tak:
co jest złe bo zamiast `users`.`id` chce otrzymać `users`.`c_id` co robię nie tak ? |
|
|
18.07.2018, 13:12:28
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) |
Jak jest złe, skoro masz
Cytat `users`.* , więc możesz sobie pobrać zarówno user->id jak i user->c_id
|
|
|
18.07.2018, 15:20:51
Post
#3
|
|
Grupa: Moderatorzy Postów: 36 440 Pomógł: 6289 Dołączył: 27.12.2004 |
@Pilsener mysle ze chodzi raczej o to
.... ON `users`.`id` -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
18.07.2018, 21:07:19
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) |
A w jaki sposób to zapytanie powstaje?
I totalny bałagan w nazwach, jak ktoś ma się w tym połapać? I skoro chcesz relację many-to-many User do EmploymentRequest to dlaczego nie po user.id i employment_request.id? Relację mapuje się po kluczu głównym i na 99% w ORM nie można tego zmienić a już na pewno nie w archaicznym Eloquent. I nie polecam używania relacji w Larwie, bo raz, że nie ma nad tym kontroli, dwa - powstaje dużo zbędnych zapytań do bazy a trzy - kiedy trzeba coś zmienić (np. dodać dodatkowy where) musimy to zmieniać w wielu miejscach. Najlepiej jest stworzyć sobie serwisy typu "EntityRepository" i używać query builderów: https://laravel.com/docs/5.2/queries#selects |
|
|
19.07.2018, 16:33:23
Post
#5
|
|
Grupa: Zarejestrowani Postów: 673 Pomógł: 106 Dołączył: 31.12.2008 Ostrzeżenie: (0%) |
Wyprostuję trochę post przedmówcy:
Relację mapuje się po kluczu głównym i na 99% w ORM nie można tego zmienić a już na pewno nie w archaicznym Eloquent.
I nie polecam używania relacji w Larwie, bo raz, że nie ma nad tym kontroli, dwa - powstaje dużo zbędnych zapytań do bazy a trzy - kiedy trzeba coś zmienić (np. dodać dodatkowy where) musimy to zmieniać w wielu miejscach. Stosują po prostu metodę z dodatkowym zapytaniem zamiast joinem. Wydajnościowo wychodzi bardzo podobnie (nie mam już testów aby przywołać). Co do where to można nawet tak zrobić:
Jeśli chodzi o problem autora to:
Jak widać jak narazie określiłeś tylko klucze dla tabeli "pivot" (tzn. "pośredniej"). Widzę że w modelu User masz id, zapewne domyślnie ustawione jako primaryKey, jako że w relacji nie wyspecyfikowałeś dalszych kluczy to bierze właśnie ten klucz (id). Ten post edytował r4xz 19.07.2018, 16:39:31 -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 28.03.2024 - 09:21 |