2013-07-20 18 views
5

Sto provando a creare un'app Laravel utilizzando una struttura di database personalizzata. Ho tabelle types, units, content e una tabella di pivot denominata relations. La struttura della tabella relations è tale:Eloquent ORM/Laravel - usa la struttura della tabella pivot personalizzata

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

In altre parole, i primi tre tabelle hanno molti-a-molti rapporti tra loro, e il quarto è la tabella pivot per tutti i rapporti. Come posso usare il metodo BelongsToMany di Eloquent con questa struttura di tabelle pivot, ad esempio, come posso selezionare solo i record della tabella pivot rilevanti per la relazione data? Per esempio, come dovrei usare solo i rapporti type_unit in questo:

class Type extends Eloquent { 

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

} 

ma allo stesso tempo ignorare i rapporti unit_content?

risposta

12

belongsToMany accetta il terzo e il quarto argomento. Lo si può vedere nella documentazione: http://laravel.com/docs/eloquent#relationships

Ma la cosa che non è nella documentazione è che si può vincolo vostra relazione concatenando le funzioni di generatore di query come where, orderBy ecc

Così il vostro codice sarebbe qualcosa di simile :

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 sei una stella, grazie! –

+0

Contento di aver potuto aiutare. :) –

Problemi correlati