2016-07-23 3 views
1

Ich habe eine Tabelle mit dem Namen users. Jeder dieser Benutzer hat verschiedene Dinge:Wie man mehrere Beziehungen mit Laravel Eloquent zurückgibt?

  • Land
  • Gerät
  • Computer
  • Kategorie

habe ich erstellt eine Tabelle für jede dieser oben 'Dinge'. Ähnliche folgendes:

1 | United States 
2 | United Kingdom 
3 | Australia 
4 | Canada 
5 | Italy 

etc ...

ich diese Werte in der Benutzer-Tabelle zu speichern, wie folgt:

ID | Country | Device | Computer | Category | 
---|---------|--------|----------|----------| 
1 |  3 |  2 |  6 |  2 | 
2 |  4 |  3 |  9 |  1 | 

etc ...

jede Jetzt von Die obigen Zahlen sind der ID der entsprechenden Tabelle zugeordnet.

Was ich will ist eine eloquente Abfrage und Suche nach allen users und "Ersetzen" ihre entsprechenden Werte aus ihrer Hilfstabelle.

Ich dachte darüber nach, eine eloquente Beziehung für jedes dieser Dinge in der users Tabelle zu tun, aber dann bin ich mir nicht sicher, wie man sie auf einmal erhält/anruft.

Kann mir jemand helfen, dieses Problem anzugehen?

+0

Ich finde es schwer, die Sie verwenden Laravel Versionen 4, 5 und 5.2 zur gleichen Zeit, zu glauben, – Jonathan

+0

Sie bitte Ihre Tags an die entsprechende Version von Laravel beheben Sie verwenden. –

+0

@ Jonathan Sorry für die Verwirrung, fertig. –

Antwort

4
$model = Model::with('relatedModel', 'relatedModelTwo')->get(); 

Also in Ihrem Fall kann es so etwas wie dieses. Wenn Sie nur eine Relation mit der user zurückgegeben möchten, entfernen Sie die anderen.

$user = User::with('country', 'Device', 'Computer', 'Category')->get(); 

Wenn Sie dd($user) Sie die entsprechenden Modelle der relations Array Attribut sehen sollte.

auf die Beziehungen Eigenschaften von dort zuzugreifen, ist es einfach

$user->device->deviceAttribute

Einfüg.Nummer Kommentar:

Eloquent der Fremdschlüssel verwendet die Modellbezeichnung übernehmen wird. Wenn Ihre Tabelle user die Spalte id enthält, wird davon ausgegangen, dass eine Spalte device mit der Bezeichnung user_id vorhanden ist. Wenn Sie das getan haben, dann sind Sie festgelegt und nichts sollte getan werden.

Wenn Sie Ihre Spalte benannt haben, um die Modelle mit etwas anderem zu verknüpfen, müssen Sie dies als zweites Argument in der Relation-Methode übergeben.

public function device() 
{ 
    return $this->hasOne('App\Device', 'foreign_key_here',); 
} 

umgekehrt, wenn der Benutzer das Gerät gehört, Eloquent wird versuchen, passen die user_id Spalte auf der Gerätetabelle zum id Spalte auf der Benutzertabelle erhalten wollte. Wenn Sie wie zuvor eine andere Spalte verwendet haben, um sie zu verknüpfen, deklarieren Sie den Fremdschlüssel als zweites Argument.

public function user() 
{ 
    return $this->belongsTo('App\User', 'foreign_key_here',); 
} 

Laravel Doc One-To-One Relation

+0

Danke für deine Antwort, es spricht ziemlich viel alles. Es gibt nur noch eine Sache. Wie sollte ich die Beziehungen erstellen, damit ich den richtigen Wert für die ID des Attributs abrufen kann? –

+0

@Radical_Activity um sicherzustellen, dass Sie das geeignete Gerät, Computer usw. für den Benutzer bekommen? –

+0

Ja genau. Vielleicht mit 'hasMany'? Auf dem Gerät, Computer, etc? –