2016-12-24 2 views
0

Ich bin gerade in Laravel (5.3) und habe über Eloquent Szenarien in meinem Kopf laufen versucht, herauszufinden, wie ich komplexere Beziehungen zwischen Modellen/Tabellen erreichen würde.Komplexe Beziehungen mit Laravel/Eloquent

In meinem Beispiel hier, ich baue eine Kontakte App. Benutzer haben viele Kontakte, das ist einfach. Der schwierigste Teil ist die Definition von Kontaktverbindungen. Angenommen, ein Benutzer hat zwei Kontakte, die Schwestern sind. Der Benutzer kann diese beiden Kontakte verbinden, um sich einfach zwischen ihnen zu bewegen. Der Benutzer kann einem Kontakt eine unbegrenzte Anzahl von Verbindungen zuweisen.

Also, ich habe offensichtlich eine Benutzer-Tabelle mit einer ID und einer Kontakt-Tabelle mit ID und einem Benutzer-ID-Feld, um es an einen Benutzer anzuhängen. Der Benutzer kann auch mehrere Verbindungsnamen erstellen. Wie "Schwester". Sobald der Benutzer einen neuen Verbindungsnamen erstellt hat, möchte ich ihn speichern, damit er später den gleichen Verbindungsnamen später mit einer Eingabehilfe oder etwas Ähnlichem verwenden kann. Die Tabelle connection_names enthält also Einträge, die an einen Benutzer gebunden sind.

Die Tabelle, mit der ich eine harte Zeit habe, ist die Pivot-Tabelle der tatsächlichen Verbindungen. Ich nehme an, es ist sowieso ein Pivot-Tisch. Immer noch irgendwie neu in der ganzen Terminologie. Das Diagramm sagt alles. Die Verbindungstabelle besteht im Grunde aus allen IDs, die sich mit anderen Tabellen verbinden. Zwei IDs aus der Kontakttabelle, die die Verbindung selbst herstellen, und eine weitere ID für den Namen der Verbindung.

Also zuerst, wie in der Welt habe ich die Modelle eingerichtet, um die Beziehungen Beziehungen in Laravel eloquent zu definieren? Und gibt es etwas, was ich besser oder sauberer machen könnte/sollte? Mache ich die Namenskonventionen auch korrekt für Laravel/Eloquent, um automatisch einen oder alle davon auszuwählen?

Vielen Dank! connections diagram

Antwort

0

Wenn Sie ein $connection bezwecken und zugreifen wollen die Contact Objekt (Host oder verbundenen Benutzer) dann können Sie verwenden belongsTo als:

public function host() 
{ 
    return $this->belongsTo('App\Contact', 'contact_id'); 
} 

public function connection() 
{ 
    return $this->belongsTo('App\Contact', 'connection_id'); 
} 

Und wenn Sie ein Objekt von Contact Modell haben und wollen alle Verbindung zugreifen, dann müssen Sie eine belongsToMany Beziehung wie:

public function connection() 
{ 
    return $this->belongsToMany('App\Contact', 'connections', 'contact_id', 'connection_id'); 
} 

Ihre Namenskonventionen sind korrekt.

+0

Danke! Ich gebe das eine Chance! – Mattaton