0

次の方法で、3つのテーブル/アクティブレコードモデルを介して、2つのオブジェクト(この例ではModelAとModelB)間の多対多の関係を定義しています。

ModelA-<ModelA_B>-ModelB

ModelA_Bには、ModelAとModelBの両方に対する外部キーフィールドが含まれています。したがって、ModelAのコードでは、relations()関数に次のように追加しました。

'modelbs' => array(self::MANY_MANY, 'ModelB', 'tbl_modelb(modela_id,modelb_id)'),

私の質問は、リンクテーブルModelA_Bとの関係を表すために、Giiによって生成されたHAS_MANY関係がまだ必要ですか、それとも上記のMANY_MANYによって暗黙的に宣言されていますか?

'modelabs' => array(self::HAS_MANY, 'ModelA_B', 'ModelA_Id'),
4

1 に答える 1

2

リレーションを使用する場合、テーブルに別のリレーションMANY_MANYを定義する必要はありません。HAS_MANYModelA_B

しかし、この機能を使用することもできます。この機能は、ある時点でリレーションthroughを置き換えます(私が正しく覚えていれば、おそらくYii 2.0で)。MANY_MANYこの場合、2つの関係を定義します。

'mobelabs' => array(self::HAS_MANY, 'ModelA_B', 'ModelA_Id'),
'modelbs' => array(self::HAS_MANY, 'Model_B', 'ModelB_Id', 'through'=>'modelabs'),

ModelA_Bこれで、 via$modelA->modelabsModelBviaの両方の関連レコードにアクセスできます$modelA->modelbs

于 2013-03-07T21:39:52.067 に答える