代码之家  ›  专栏  ›  技术社区  ›  Eduardo

Yii2关系hasone

  •  0
  • Eduardo  · 技术社区  · 7 年前

    我有两个简单的模型:

    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)
    

    有什么想法吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Muhammad Omer Aslam    7 年前

    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']);
        }
    
    }