2016-07-25 78 views
0

我有3款車型:Item,Serials和SerialsCategories。當我顯示Item窗體(創建或更新)時,我需要顯示屬於上一步中選定的categoryId的連續劇。一個序列可以屬於多個類別。Yii2。相關車型

現在,我有我的產品型號:

public function getSerialsTypeByCategory() { 
     return (new SerialType)->getByCategory($this->itemCategoryId); 
    } 

在我SerialType型號:

public function getByCategory($itemCategoryId) { 

     return SerialTypeItemCategory::find()->select(['serialTypeId'])->where(['itemCategoryId' => $itemCategoryId])->all(); 

    } 

這是工作,它做什麼,我需要,但...這是正確的方式?有沒有更好的辦法?

+0

看來我的權利..代碼是在正確的地方(模型),並寫在正確的方式(吸氣) – scaisEdge

回答

2

這並不是錯誤的你在做什麼。但有更多的東西 - 檢查此鏈接: Working with Relational Data

如果使用->hasOne->hasMany定義的關係,你的模型上漲了額外的好處,比如懶惰或預先加載加盟:

​​

與一個關係,您還可以使用->link->unlink來添加/刪除相關數據,而不必考慮鏈接的字段。

此外,它很容易定義通過結臺關係:

class Order extends ActiveRecord 
{ 
    public function getItems() 
    { 
     return $this->hasMany(Item::className(), ['id' => 'item_id']) 
      ->viaTable('order_item', ['order_id' => 'id']); 
    } 
} 
+0

謝謝很多!我會研究一下viaTable,第一次看到它。 – Eduardo