我有一个页面表。页面可以有父母,也可以是页面。我想选择parent_id = NULL及其'children'的所有页面。但是当我尝试这个时
public function getPages()
{
return $this->hasMany(Page::className(), ['parent_id' => 'id']);
}
我得到一个1066不唯一的表/别名:'page'错误...我知道如何在Yii1中修复此问题,但我无法弄清楚在Yii2中修复它。
答案 0 :(得分:4)
我已经为我的成绩单元做了这个,我的成绩是亲子关系。
请按照以下步骤操作:
在模型文件中编写此代码以进行自联接。我们需要别名表名。这里'parent'是别名。
public function getParent() {
return $this->hasOne(self::classname(), ['id' => 'parent_id'])->
from(self::tableName() . ' AS parent');
}
在您的视图文件中编写此代码
[
'label' => 'Parent Grade',
'value' => ($model->parent_id != '' || $model->parent_id != 0) ? $model->parent->name : 'Root Grade',
],
在我的代码中,如果parent_id
字段不为null / 0,那么它将显示父级别名称,否则为“Root Grade”。
答案 1 :(得分:3)
您需要为表名设置别名。
$this->hasMany(Category::className(), ['parent_id' => 'id'])->from(['cat' => 'category']);
参见讨论here。