2013-07-20 15 views
5

Ich versuche, eine Laravel-App mit einer benutzerdefinierten Datenbankstruktur zu erstellen. Ich habe Tabellen types, units, content, und eine Pivot-Tabelle namens relations. Die Struktur der relations Tabelle ist so:Eloquent ORM/Laravel - benutzerdefinierte Pivot-Tabellenstruktur verwenden

--------------------------------------------- 
| id | relation_type | first_id | second_id | 
--------------------------------------------- 
| 1 | type_unit |  1 | 2  | 
--------------------------------------------- 
| 2 | unit_content |  2 | 3  | 
--------------------------------------------- 

Mit anderen Worten, die ersten drei Tabellen haben viele-zu-viele Beziehungen untereinander und die vierte ist die Pivot-Tabelle für alle Beziehungen. Wie kann ich die Methode BelongsToMany von Eloquent mit dieser Pivot-Tabellenstruktur verwenden, d. H. Wie kann ich nur die Datensätze der Pivot-Tabelle auswählen, die für die gegebene Relation relevant sind? Zum Beispiel, wie würde verwende ich nur die type_unit Beziehungen in dieser:

class Type extends Eloquent { 

    public function units() 
    { 
     return $this->belongsToMany('Unit', 'relations'); 
    } 

} 

aber zugleich die unit_content Beziehungen ignorieren?

Antwort

12

belongsToMany würde 3. und 4. Argumente akzeptieren. Sie können es in der Dokumentation finden Sie unter: http://laravel.com/docs/eloquent#relationships

Aber die Sache, die nicht in der Dokumentation ist, dass Sie Ihre Beziehung durch Verkettung der Query Builder-Funktionen wie where Einschränkung kann, orderBy usw.

So würde Ihr Code so etwas wie :

class Type extends Eloquent { 

    public function units() 
    { 
     return $this->belongsToMany('Unit', 'relations', 'first_id', 'second_id') 
      ->withPivot(['relation_type']) 
      ->where('relations.relation_type', '=', 'type_unit'); 
    } 

} 
+0

Umut du bist ein Star, danke! –

+0

Ich bin froh, dass ich helfen konnte. :) –

Verwandte Themen