Join 我想用CDbCriteria和联接创建一个查询

Join 我想用CDbCriteria和联接创建一个查询,join,criteria,yii,Join,Criteria,Yii,从表1 a、表2 m中选择*其中a.colid=1和m.colid=1按a.date desc排序假设您的表结构如下所示 Table1 ========================== colid | col2 | col3 | col4 Table2 ========================== colid | col2 | col3 | col4 关系很重要 在Yii框架中,Ac

从表1 a、表2 m中选择*其中a.colid=1和m.colid=1按a.date desc排序

假设您的表结构如下所示

        Table1
        ==========================
        colid | col2 | col3 | col4


        Table2
        ==========================
        colid | col2 | col3 | col4
关系很重要

在Yii框架中,ActiveRecords概念在数据库操作中扮演着巨大的角色。AR类引用数据库表。要执行关系查询,您应该定义表之间的关系。您可以在模型中使用relations()方法来实现这一点。请遵守以下语法

如果表1中的关系实体多于表2中的关系实体,则

 class Table1 extends CActiveRecord
 {
     public function relations()
     {
          return array(
              'table2' => array(self::HAS_MANY, 'Table2', 'colid'),
          );
     }
 }
这里,表2也与表1有关系。即

 class Table2 extends CActiveRecord
 {
     public function relations()
     {
          return array(
              'table1' => array(self::BELONGS_TO, 'Table1', 'colid'),
          );
     }
 }
如果您的程序中现在有这些指令,则可以执行关系查询

使用CDBC标准

    $cri = new CDbCriteria();
    $cri->join = 'JOIN table2 t2 ON t1.colid = 1 and t2.colid = 1';
    $cri->order = 'col3 DESC'; //In your case date fields

    $RS = Table1::model()->findAll($cri);

    echo '<pre>';
    print_r($RS);
    echo "</pre>";

    //to echo col2 info of table1
    echo $RS[0]->col2;

    //to echo col1 info of table2
    echo $RS[0]->table2[0]->col2;

我希望它可以帮助您计算程序中的指令。

是一本很好的读物,页面末尾有一些示例。如果使用
'table2'=>array(self::HAS_MANY,'table2','colid','joinType'=>'INNER JOIN'),
就不再需要使用CDbCriteria进行连接。
     $info = Table1::model()->findByPk(1);
     echo ($info->table2[0]->col2);