2016-05-11 6 views
0

子テーブルとモデルを拡張してベーステーブルとモデルを作成する最善の方法は何ですか? 例えば、menuItemsテーブルと別のテーブルサンドイッチがある場合、1対1のテーブルの間には関係があります。menuItems.id = sandwiches.sandwichid。したがって、サンドイッチはmenuItemであるため、基本フィールドは共有されていますが、独自のフィールド項目があります。Yii2で2つのテーブルの2つのモデルを拡張する

私は本当にサンドイッチでmenuItemsを拡張し、プロパティにアクセスして新しいシナリオを作成したいと思います。新しいサンドイッチを作成して保存すると、menuitemが作成されます。

これはなぜこれを行うのが良い方法ですか、そうでない場合はこれについてどうやって行くのですか?

答えて

0

Yii2では、私は、次の方法でこれをアプローチします:

  1. menuItemsテーブルとyii\db\ActiveRecordを拡張MenuItemsモデルを作成します。
  2. 別のsandwichesテーブルと、yii\db\ActiveRecordを拡張する別のSandwichesモデルを作成します。
  3. 2つの間のリレーションシップメソッドを宣言します(the docs参照)。

    class MenuItem extends \yii\db\ActiveRecord 
    { 
    
        public function getSandwich() 
        { 
         return $this->hasOne(Sandwich::className, ['sandwichid' => 'id']); 
        } 
    
    } 
    
    class Sandwich extends \yii\db\ActiveRecord 
    { 
    
        public function getMenuItem() 
        { 
         return $this->hasOne(MenuItem::className(), ['id' => 'sandwichid']); 
        } 
    
    } 
    
  4. コントローラに2つの間のロジックを処理させますか?

  5. オプションで、保存イベント(doc here)の間に他のレコードを変更/作成するActiveRecordbeforeSaveafterSaveメソッドを使用することができます。

あなたはYii2は、リレーショナル・データを処理する方法に慣れていない場合は、私は非常にそれはあなたに多くの時間と労力を節約し、多くの場合、あなたのコードやクエリをスピードアップすることができますステップ3でリンクされdocsを読んで推薦しますちょっとでも。

関連する問題