2013-07-20 32 views
5

Tôi đang cố gắng tạo ứng dụng Laravel bằng cấu trúc cơ sở dữ liệu được tùy chỉnh. Tôi có các bảng types, units, content và bảng tổng hợp được gọi là relations. Cấu trúc của bảng relations là ví dụ:Eloquent ORM/Laravel - sử dụng cấu trúc bảng pivot tùy chỉnh

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

Nói cách khác, ba bảng đầu tiên có nhiều-nhiều mối quan hệ với nhau, và một phần tư là bảng tổng hợp tất cả các mối quan hệ. Làm cách nào tôi có thể sử dụng phương pháp BelongsToMany của Eloquent với cấu trúc bảng tổng hợp này, tức là làm cách nào tôi có thể chỉ chọn các bản ghi của bảng tổng hợp có liên quan đến mối quan hệ đã cho? Ví dụ: làm cách nào tôi chỉ sử dụng quan hệ type_unit trong trường hợp này:

class Type extends Eloquent { 

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

} 

nhưng đồng thời bỏ qua quan hệ unit_content?

Trả lời

12

belongsToMany sẽ chấp nhận đối số thứ 3 và thứ 4. Bạn có thể nhìn thấy nó trong tài liệu hướng dẫn: http://laravel.com/docs/eloquent#relationships

Nhưng điều đó không phải là trong tài liệu hướng dẫn là bạn có thể hạn chế mối quan hệ của bạn bằng cách kết nối các chức năng xây dựng truy vấn như where, orderBy, vv

Vì vậy, mã của bạn sẽ là một cái gì đó như :

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 bạn là ngôi sao, cảm ơn! –

+0

Vui vì tôi có thể giúp. :) –

Các vấn đề liên quan