【发布时间】:2017-10-25 15:26:47
【问题描述】:
我有这个架构:
以及模型zwz中的这种关系:
public function getAuftrs() {
return $this->hasMany(\app\models\Auftr::className(), ['id' => 'auftr_id'])
->viaTable('znw', ['zwzx_id' => 'id'])
->viaTable('zwz_expl', ['zwz_id' => 'id'])
;}
在zwz看来:
<?= count($model->getAuftrs()->asArray()->all())
我明白了:
PHP 通知 – yii\base\ErrorException
未定义索引:auftr_id
- 在 C:...\vendor\yiisoft\yii2\db\ActiveRelationTrait.php 中
现在如果我将两个 viaTable()s 更改为:
->via('znws')
当然还要先定义这个关系:
public function getZnws() {
return $this->hasMany(\app\models\Znw::className(), ['zwzx_id' => 'id'])
->viaTable('zwz_expl', ['zwz_id' => 'id'])
;}
然后就可以了。
问题是,后者via() 方式与yii2-giiant 不兼容,所以我想知道两者之间的实际区别是什么,以及如何保留原来的viaTable()方式。
对我来说,似乎很清楚我们总是必须选择链的最后一个 ID 并向后定义所有其他 ID。 (但是在这些文档中有via() 而不是viaTable(),也许它也会有所不同)
提前致谢!
【问题讨论】:
-
能给我们看看zwz的型号吗
-
其实我觉得我找到了问题所在。它与via和viaTable无关。问题是您正在使用模型中不存在的索引。如您所见,zwz 没有auftr_id 的表。
-
您能告诉我如何通过多个表定义
viaTable()吗?如果我什至不必使用多个viaTable()s...怎么办? -
我的意思是,一旦我通过
viaTable()定义了第一个表,我就必须在该模型中定义下一个表,依此类推...? -
你可以尝试交换'auftr_id'和'id'
标签: yii2 yii2-giiant