2013-07-20 10 views
5

Próbuję utworzyć aplikację Laravel, używając niestandardowej struktury bazy danych. Mam tabele types, units, content i tabelę przestawną o nazwie relations. Struktura tabeli relations jest taki:Eonquent ORM/Laravel - użyj niestandardowej struktury tabeli przestawnej

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

Innymi słowy, pierwsze trzy tabele mają wiele do wielu relacji między sobą, a czwarty jest stół obrotowy dla wszystkich relacjach. W jaki sposób mogę użyć metody Eofilquier BelongsToMany z tą strukturą tabeli przestawnej, tj. Jak mogę wybrać tylko rekordy tabeli przestawnej odpowiednie dla danej relacji? Na przykład, w jaki sposób mogę korzystać tylko stosunki type_unit w tym:

class Type extends Eloquent { 

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

} 

ale jednocześnie ignorować stosunki unit_content?

Odpowiedz

12

belongsToMany zaakceptuje 3 i 4 argumenty. Widać to w dokumentacji: http://laravel.com/docs/eloquent#relationships

Jednak rzeczą, która nie jest w dokumentacji, że można przez ograniczenie swoją relację łączenia funkcji kwerend jak where, orderBy itp

Więc kod byłoby coś :

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 jesteś gwiazdą, dzięki! –

+0

Cieszę się, że mogę pomóc. :) –

Powiązane problemy