2014-11-05 26 views
31

Ví dụ trong một-nhiều do tài liệu (http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#relational-data), bạn có thể liên kết hai mô hình theo cách này (one-many = company-zone):Làm thế nào để làm việc với nhiều-nhiều mối quan hệ trong Yii2

$defaultZone = new Zone; 
$defaultZone->name = Zone::DEFAULT_ZONE; 
$company->link('zones', $defaultZone); 

Nhưng làm thế nào nó hoạt động cho các mối quan hệ nhiều - nhiều khi bạn có bảng chuyển tuyến như tbl_user_market(user_id, market_id)?

Trả lời

66

Khi sử dụng một bảng đường giao nhau cho nhiều-nhiều mối quan hệ, bạn phải

  1. Xác định các mối quan hệ
  2. liên kết hai mô hình cùng

Trong mô hình tài xác định như sau chức năng quan hệ:

public function getMarkets() { 
    return $this->hasMany(Market::className(), ['id' => 'market_id']) 
     ->viaTable('tbl_user_market', ['user_id' => 'id']); 
} 

Trong mô hình Market xác định như sau chức năng hứng khởi:

public function getUsers() { 
    return $this->hasMany(User::className(), ['id' => 'user_id']) 
     ->viaTable('tbl_user_market', ['market_id' => 'id']); 
} 

Và cuối cùng, sau khi tiết kiệm cả hai mô hình, liên kết chúng lại với nhau:

$user = new User; 
$user->name = 'Foo'; 
$user->save(); 

$market = new Market; 
$market->name = 'Bar'; 
$market->save(); 

$user->link('markets', $market); 

Các cuộc gọi đến link() sẽ cư trú trong bảng đường giao nhau.

Tham chiếu: http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#link()-detail

+0

oh vâng, bạn nói đúng! cảm ơn bạn – raiym

+3

cách thực hiện việc này để cập nhật? – onegun

+0

@onegun: Khi bạn gọi save() trên một mô hình, Yii xác định có thực hiện cập nhật hay chèn truy vấn hay không. Đó là vẻ đẹp của một khuôn khổ như vậy, bạn không phải lo lắng về những thứ như thế nữa. – vim

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