Yii2关系有一个

Yii2关系有一个,yii2,yii2-model,yii2-active-records,Yii2,Yii2 Model,Yii2 Active Records,我有两个简单的模型: class Page extends ActiveRecord { public static function tableName() { return 'page'; } public function getPageType() { return $this->hasOne(PageType::className(), ['id', 'page_type_id']); } } class Pa

我有两个简单的模型:

class Page extends ActiveRecord {

    public static function tableName() {
        return 'page';
    }

    public function getPageType() {
        return $this->hasOne(PageType::className(), ['id', 'page_type_id']);
    }
}

class PageType extends ActiveRecord {

    public static function tableName() {
        return 'page_type';
    }

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

}
我正在尝试获取页面列表,并通过
页面类型\u id
对其进行筛选,因此我正在执行以下操作:

Page::find()
     ->joinWith('pageType')
     ->where(['page.service_id' => $this->serviceId, 'page.active' => 1])
     ->all();
但我得到了以下错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'page_type.0' in 'on clause'
The SQL being executed was: SELECT `page`.* FROM `page` 
LEFT JOIN `page_type` 
   ON 
     `page`.`id` = `page_type`.`0` 
      AND 
     `page`.`page_type_id` = `page_type`.`1` 
WHERE 
      (`page`.`service_id`=1) AND (`page`.`active`=1)

有什么想法吗?

您需要在关系中以
name=>value
对的形式提供列名,而不是逗号分隔的列表

return $this->hasOne(PageType::className(), ['id', 'page_type_id']);

更改关系和类代码如下所示

class Page extends ActiveRecord {

    public static function tableName() {
        return 'page';
    }

    public function getPageType() {
        return $this->hasOne(PageType::className(), ['id'=> 'page_type_id']);
    }
}

class PageType extends ActiveRecord {

    public static function tableName() {
        return 'page_type';
    }

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

}

你说得对,这是我昨天连续12个小时在做的:D,谢谢!
class Page extends ActiveRecord {

    public static function tableName() {
        return 'page';
    }

    public function getPageType() {
        return $this->hasOne(PageType::className(), ['id'=> 'page_type_id']);
    }
}

class PageType extends ActiveRecord {

    public static function tableName() {
        return 'page_type';
    }

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

}