Activerecord 在Yii2中,如何将表连接到自身?

Activerecord 在Yii2中,如何将表连接到自身?,activerecord,yii2,self-join,Activerecord,Yii2,Self Join,我有一张书桌。页面可以有父级,父级也是页面。我想选择所有父\ u id=NULL及其“子”的页面。但是当我尝试这个的时候 public function getPages() { return $this->hasMany(Page::className(), ['parent_id' => 'id']); } 我得到一个get a 1066非唯一表/别名:“page”错误。。。我知道如何在Yii1中修复这个问题,但我不知道如何在Yii2中修复它。您需要为表名添加别名 $

我有一张书桌。页面可以有父级,父级也是页面。我想选择所有父\ u id=NULL及其“子”的页面。但是当我尝试这个的时候

public function getPages()
{
    return $this->hasMany(Page::className(), ['parent_id' => 'id']);
}

我得到一个get a 1066非唯一表/别名:“page”错误。。。我知道如何在Yii1中修复这个问题,但我不知道如何在Yii2中修复它。

您需要为表名添加别名

 $this->hasMany(Category::className(), ['parent_id' => 'id'])->from(['cat' => 'category']);

请参阅讨论。

我已经为我的成绩模块完成了此操作,在该模块中,我的成绩具有父子关系

按照以下步骤操作:

  • 在模型文件中,为自联接编写以下代码。我们需要给表名加上别名。此处“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\u id
    字段不为空/零,则它将显示父级名称,否则为“根级”