有点连接到 my previous question :
我有以下表格/模型:
我已经成功地连接了actionIndex的所有表,但我现在想为actionView实现同样的事情,但似乎find()和findOne() 效果不一样。联接不适用于 findModel($id)
我真的不知道,你能指出我正确的方向吗?事实上,我只需要在模型 BCD View 中显示模型 A 的相关数据,并且我很确定有一个简单的方法可以做到这一点,但我找不到任何东西,我什至不知道要寻找什么。因为问题是,在正常关系下我只能访问表 B,所以最多 2 个级别。我试图建立一种达到第三级的关系,但没有成功。谢谢。
最佳答案
您不必定义多级关系。
如果您必须对 BCD 中的 1 条记录执行此操作,您只需使用以下命令即可访问它
$BCDmodel->BC->B->A->attribute
当然使用您定义的关系的名称。
当在表格中显示此信息时,这也可以工作,但是......效率很低。对于您显示的每一行,您都会收到大量查询,因此您应该更改查询以使其更加高效。
$query = BCD::find()->with(['BC', 'BC.B', 'BC.B.A']).....
这会将所有内容连接在一起并使查询变得更好,当您确实需要显示数据时您仍然可以使用
$BCDmodel->BC->B->A->attribute
只需确保您的 BCD 模型与名为 BC 的 BC 存在关系,您的 BC 模型与名为 B 的 B 存在关系,您的 B 模型与名为 A 的 A 存在关系,以上内容应该有效。
关于Yii2 第三层关系数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31233702/