2016-05-13 12 views
0

Ich habe geerbt 4 MySQL-Tabellen:Eloquent belongsToMany withPivot Mapping

Listings
-id
-description
...

Standorte
-id
-listing_id

Führer
-id
-name
....

guide_location
-id
-guide_id
-location_id

Eintrag => (viele) Locations
Guide => (viele) Standorte => (1) Listing

Listing, Location und Guide ist jeweils ein eigenes Modell in einer Laravel Dingo-Anwendung. Hier ist das Setup:

//Listing model 
public function locations() 
{ 
    return $this->hasMany('Location'); 
} 

Dann

//Location model 
public function guides() 
{ 
    return $this->belongsToMany('Guide'); 
} 
public function listing() 
{ 
    return $this->belongsTo('Listing'); 
} 

Und

//Guide model 
public function locations() 
{ 
    return $this->belongsToMany('Location'); 
} 

Ich habe eine Spalte guide_location hinzugefügt, und ich will es zurück, wenn ich einen Leitfaden aus der Auswahl Datenbank.

So jetzt:

guide_location
-id
-guide_id
-location_id
-Stellung

Ich versuchte ->withPivot('position') sowohl belongsToMany() Anweisungen im Handbuch und Standortmodelle Hinzufügen aber es funktioniert nicht, ich sehe die neue Spalte nicht.

Irgendwelche Ideen, was ich falsch mache?

+0

Ich bin ein wenig verwirrt, wenn Sie gerade eine Spalte hinzugefügt haben, warum müssen Sie zu einer anderen Tabelle drehen? Oder haben Sie eine fünfte Tabelle eingeführt, und wenn Sie nach dem 'Guide' suchen, der' Guide Location' zurückgibt, möchten Sie auch, dass 'Guide Location' mit dem Ergebnis seiner' position relations' zurückkehrt ? – Ohgodwhy

+0

Vielleicht ist withPivot nicht der Befehl, den ich brauche? Aus den [Dokumenten] (https: // laravel.com/docs/5.1/eloquent-relations) es schlug vor, dass dies der einzige Weg war, diesen anderen Wert einzuziehen, es sei denn, ich lese ihn falsch. "Standardmäßig sind nur die Modellschlüssel auf dem Pivot-Objekt vorhanden Tabelle enthält zusätzliche Attribute, die Sie beim Definieren der Beziehung angeben müssen: " – OrdinaryHuman

+0

Das ist nur dann der Fall, wenn Sie eine Pivot-Tabelle verwenden, aber in diesem Fall ist' guide_location' keine Pivot-Tabelle sogar polymorph, es hat nur viele Einschränkungen. wenn ich '$ guide = Guide :: find ($ id) -> mit ('guide_location') abfrage;' Ich würde erwarten, dass ich eine 'position'-Spalte bei meiner Rückkehr sehe, wenn man den oben angegebenen Code verwendet. Haben Sie tatsächlich eine Positionstabelle, die Sie über die Tabelle "guide_location" verknüpfen möchten? – Ohgodwhy

Antwort

0

OK, ->withPivot() funktionierte, ich sah gerade nicht das Ergebnis, weil es in location.pivot.position war, nicht location.position. Dumm.

Hoffe das hilft anderen.

Verwandte Themen