2013-05-31 23 views
5

Jestem nowiutka dla Laravel i Eloquent (i mam minimalne doświadczenie z ORMem w ogóle).Eloquent/Laravel Trójdrożna relacja wiele do wielu

Powiedzmy mam trzy tabele bazy danych:

  1. widżetów
  2. Actions
  3. Użytkownicy

Mam modelowane jedną tabelę skrzyżowanie, które ma kolumn:

  1. widget_id
  2. action_id
  3. user_id
  4. datownik

Punkt styku jest do prowadzenia dziennika interakcji - Take znacznik czasu za każdym razem user wykonuje action na widget. Widzę, jak modelować proste relacje wiele do wielu za pomocą Eloquent i działa to dobrze, ale nie jestem pewien, jak wymodelować bardziej skomplikowaną trójstronną relację.

Zresztą, nawet gdybym miał związek po prostu wiele-do-wielu (słownie widget do action tak byłoby tabeli o nazwie action_widget), jak mogę dodać wyraźnie modelu tabeli w wymowny action_widget, dla w celu śledzenia dodatkowych danych o każdej relacji (np. znacznik czasu, pole komentarza, itp.). Czy po prostu robię to w całkowicie niewłaściwy sposób?

Będąc nowicjuszem w ORM, czuję się bardzo ograniczony co do tego, co mogę zrobić! Czy to uczucie odejdzie? : p

Odpowiedz

11

Przestawianie działa dobrze, gdy masz dwukierunkową relację, taką jak Categoty < -> Artykuł. , ale jeśli masz 3 sposób relacji, myślę, że lepiej jest mieć model o nazwie WidgetUserAction.

Edycja: W tych przypadkach nowy "hasManyThrough" działa dobrze.

+0

Dzięki, używanie własnego modelu zdecydowanie wydaje się najlepszym rozwiązaniem. – Raolin

+3

Czy mógłbyś wyjaśnić nieco, w jaki sposób podchodziłbyś do tego? Mam podobny problem, ale nie wiem wystarczająco dużo o Eloquent, aby go przestrzegać, a dokumenty nie są wystarczająco dobre. – Mcg1978

+0

hasManyThrough nie działa w tym przypadku. Ponieważ hasManyThrough nie zwraca relacji, a jedynie wartość trzeciego atrybutu. – Mesuti

0

Laravel może automatycznie utworzyć model pośredni. Nazywa się je "tabelami przestawnymi".

Proponuję przeczytać this section in the documentation.

+0

Grałem z tym i myślę, że bardziej lubię odpowiedź Milada dla mojej sprawy. Czy istnieją inne powody, dla których warto zastosować metodę tabeli przestawnej? – Raolin

+0

Niezupełnie, jeszcze tego nie próbowałem. Niestandardowy model dla tabeli pośredniej brzmi jak dobry pomysł. – Franz