我通过以下方式通过三个表/活动记录模型定义两个对象(此示例中为ModelA和ModelB)之间的多对多关系:
ModelA - < ModelA_B> - ModelB
ModelA_B包含ModelA和ModelB的外键字段。所以在ModelA的代码中,我已经添加到 relations()函数:
'modelbs' => array(self::MANY_MANY, 'ModelB', 'tbl_modelb(modela_id,modelb_id)'),
我的问题是,我是否还需要由Gii生成的HAS_MANY关系来表示与链接表ModelA_B的关系,还是由上面的MANY_MANY隐式声明?
'modelabs' => array(self::HAS_MANY, 'ModelA_B', 'ModelA_Id'),
答案 0 :(得分:2)
如果使用MANY_MANY
关系,则无需为HAS_MANY
表定义另一个ModelA_B
关系。
但你也可以使用through
功能,它会在某些时候取代MANY_MANY
关系(如果我没记错的话可能在Yii 2.0中)。在这种情况下,您将定义2个关系:
'mobelabs' => array(self::HAS_MANY, 'ModelA_B', 'ModelA_Id'),
'modelbs' => array(self::HAS_MANY, 'Model_B', 'ModelB_Id', 'through'=>'modelabs'),
现在您可以访问这两个相关记录:ModelA_B
来自$modelA->modelabs
而ModelB
来自$modelA->modelbs
。