2013-05-31 37 views
5

io sono nuovo di zecca per laravel ed eloquente (e ho esperienza minima con ORM in generale).Eloquente/laravel tre vie molti-a-molti

Diciamo che ho tre tabelle del database:

  1. Widgets
  2. azioni
  3. Utenti

ho modellato una tabella di giunzione che ha le colonne per:

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

Il punto della giunzione è quello di mantenere un registro di interazioni - prendere un timestamp ogni volta che esegue un useraction su un widget. Vedo come modellare una semplice relazione molti-a-molti usando Eloquent e funziona bene, ma non sono sicuro di come modellare una relazione a tre vie più complicata.

Del resto, anche se ho avuto un rapporto semplicemente molti-a-molti (diciamo widget-action così ci sarebbe un tavolo chiamato action_widget), come posso aggiungere un modello esplicito per la tabella action_widget in Eloquente, per lo scopo di tenere traccia dei dati extra relativi a ciascuna relazione (ad esempio un timestamp, un campo di commenti, ecc.). O, sto solo andando su questo in un modo totalmente sbagliato?

Essendo nuovo ORM, mi sento molto confinato da quello che posso fare! Questa sensazione va via? : P

risposta

11

perno funzionano bene quando si hanno 2 vie relazione come Categoty < -> Articolo. ma se hai una relazione a 3 vie penso che sia meglio avere un modello chiamato WidgetUserAction.

Edit: In questi casi il nuovo "hasManyThrough" funziona bene.

+0

Grazie, l'utilizzo di un modello personalizzato sembra decisamente la soluzione migliore qui. – Raolin

+3

Potresti spiegare un po 'come andresti su questo? Sto affrontando un problema simile, ma non ne so abbastanza su Eloquent per seguirlo e i documenti non sono abbastanza buoni. – Mcg1978

+0

hasManyThrough non funziona per questo caso. Perché hasManyThrough non restituisce la relazione ma solo il valore del terzo attributo. – Mesuti

0

laravel può creare il modello intermedio automaticamente. Si chiamano "tabelle pivot".

vi consiglio di leggere this section in the documentation.

+0

Ho giocato con questo e penso che mi piaccia la risposta di Milad per il mio caso. Ci sono altri motivi per andare con il metodo della tabella pivot? – Raolin

+0

Non proprio, non l'ho ancora provato. Un modello personalizzato per il tavolo intermedio sembra una buona idea. – Franz