Php 将MySQL查询转换为Yii CDbCriteria

Php 将MySQL查询转换为Yii CDbCriteria,php,mysql,yii,Php,Mysql,Yii,我有两张桌子,名字是 新建\u tbl\u主\u站点ID->模型:站点ID app_tbl_ict_dapot_发电机组->型号:发电机组 我有一个像这样的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 我想在此处左键加入site

我有两张桌子,名字是

  • 新建\u tbl\u主\u站点ID->模型:站点ID
  • app_tbl_ict_dapot_发电机组->型号:发电机组
  • 我有一个像这样的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

    我正在考虑修改发电机组模型上的CdbCriteria,如何才能使发电机组gridview的数据提供程序也可以使用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实现这一点的方法是通过关系,例如,您应该将关联表的关系添加到您的模型中(如果它还没有),然后您可以直接访问相关模型的属性,例如,如果siteid对象是$model,而关系的名称是“genset”,您可以像这样获得发电机组的状态:$model->genset->status

    您要做的第一件事是创建可以像这样完成的模型之间的关系:

    public function relations()
    {
            return array(
                'genset'=>array(self::HAS_MANY, 'genset', 'siteid'),
            );
    }
    
    在模范班。在两个模型中定义关系后,使用
    ->with

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

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

    你能给我举个例子吗?我试图将状态解析到gridview中,gridview将其称为“dataProvider”=>$model->search(),提供两个表之间的关系,是否是一对多、多对多等?