将MySQL查询转换为Yii CDbWriter


Converting MySQL Query to Yii CDbCriteria

我有两个名为的表

  1. new_tbl_master_siteid->模型:站点ID
  2. app_tbl_ict_dapt_genset->型号:发电机组

我有一个类似的mysql查询

SELECT A.siteid, B.type, B.status_operations, B.status
FROM new_tbl_master_siteid as A
LEFT JOIN app_tbl_ict_dapot_genset as B
ON A.siteid = B.siteid

我想离开的地方加入siteid

我正在考虑修改发电机组模型上的CdbWriter,我该如何做到这一点,以便发电机组网格视图的数据提供者也可以使用SiteID模型中的列?

发电机组模型的标准

$criteria=new CDbCriteria;
        $criteria->compare('id',$this->id);
        $criteria->compare('siteid',$this->siteid,true);
        $criteria->compare('merk',$this->merk,true);
        $criteria->compare('type',$this->type,true);
        $criteria->compare('capacity',$this->capacity,true);
        $criteria->compare('kapasitas_tangki',$this->kapasitas_tangki,true);
        $criteria->compare('status',$this->status,true);
        $criteria->compare('status_operations',$this->status_operations,true);
        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,

===============

这是下面的关系

class genset extends CActiveRecord
.....
public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
         return array(
            'siteids'=>array(self::BELONGS_TO,'SiteID','siteid'),
        );
    }
....
public function search()
    {
        // @todo Please modify the following code to remove attributes that should not be searched.
        $criteria=new CDbCriteria;
        $criteria->compare('id',$this->id);
        $criteria->compare('siteid',$this->siteid,true);
        $criteria->compare('merk',$this->merk,true);
        $criteria->compare('type',$this->type,true);
        $criteria->compare('capacity',$this->capacity,true);
        $criteria->compare('kapasitas_tangki',$this->kapasitas_tangki,true);
        $criteria->compare('status',$this->status,true);
        $criteria->compare('status_operations',$this->status_operations,true);
        $criteria->with = array('siteids.rtp');
        $criteria->compare('siteids.rtp',$this->rtp,true);
        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
        ));
    }

和siteid类

class SiteID extends CActiveRecord
.....
public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'gensets'=>array(self::HAS_MANY, 'genset', 'siteid'),   
        );
    }

但我收到一个错误

Relation "rtp" is not defined in active record class "SiteID".

rtp是来自siteid模型的列

Yii实现这一点的方法是通过Relations e g,您应该将连接表的关系添加到您的模型中(如果它还没有(,然后您可以直接访问相关模型的属性,例如,如果SiteID对象是$model,关系的名称是'genset',您可以获得发电机组的状态,如下所示:$model->genset->status

首先要做的是在模型之间创建关系,可以这样做:

public function relations()
{
        return array(
            'genset'=>array(self::HAS_MANY, 'genset', 'siteid'),
        );
}

在模型类中。一旦在两个模型中定义了关系,就可以修改您的标准,使用->with 通过联接获取结果

$criteria->with = array('genset');

你已经准备好出发了。但要确保在两个模型中都定义了关系。