Yii2 关系 hasOne
Yii2 relationship hasOne
我有 2 个简单模型:
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']);
}
}
我正在尝试获取页面列表并按 page_type_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']);
和
return $this->hasMany(Page::className(), ['page_type_id', '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']);
}
}
我有 2 个简单模型:
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']);
}
}
我正在尝试获取页面列表并按 page_type_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']);
和
return $this->hasMany(Page::className(), ['page_type_id', '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']);
}
}