2016-07-25 14 views
0

私は3つのモデルを持っています:アイテム、シリアル、シリアルカテゴリ。アイテムフォームを表示(作成または更新)するときは、前のステップで選択したcategoryIdに属するシリアルを表示する必要があります。シリアルは複数のカテゴリに属する​​ことができます。Yii2。モデル関連

今、私は私の項目のモデルがあります:

私SerialTypeモデルに
public function getSerialsTypeByCategory() { 
     return (new SerialType)->getByCategory($this->itemCategoryId); 
    } 

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

おかげでありますlot!、viaTableについて初めて調べます。 – Eduardo

関連する問題