来自第三层的 Yii2 关系数据

Yii2 relational data from 3rd level

有点连接到:

我有以下tables/models:

我已经设法为 actionIndex 加入所有 tables,但我现在想为 actionView 实现同样的事情,但似乎 find()findOne() 不一样。连接不适用于 findModel($id)

我真的不知道,你能给我指明正确的方向吗?事实上,我只需要在模型 BCD 视图中显示模型 A 的相关数据,我很确定有一种简单的方法可以做到这一点,但我找不到任何东西,我什至不知道要寻找什么.因为问题是,在正常的关系中,我只能接触到 table B,所以最多 2 个级别。我试图建立一种延伸到第 3 级的关系,但它不起作用。谢谢

您不必定义多级关系。

如果您必须对 BCD 中的 1 条记录执行此操作,您可以使用

访问它
$BCDmodel->BC->B->A->attribute

当然要用你定义的关系的名字。

这在 table 中显示此信息时也有效,但是……效率很低。对于您显示的每一行,您都会收到很多查询,因此您应该更改查询以使其更有效率。

$query = BCD::find()->with(['BC', 'BC.B', 'BC.B.A']).....

这会将所有内容连接在一起并使查询变得更好,当您确实需要显示数据时您仍然可以使用

$BCDmodel->BC->B->A->attribute

只需确保您的 BCD 模型与 BC 有一个名为 BC 的关系,您的 BC 模型与 B 有一个名为 B 的关系,您的 B 模型与 A 有一个名为 A 的关系,以上应该有效。