【问题标题】:I want to create a query with CDbCriteria with joins我想用带有连接的 CDbCriteria 创建一个查询
【发布时间】:2013-05-15 12:47:58
【问题描述】:

SELECT * FROM table1 a, table2 m WHERE a.colid=1 and m.colid=1 order by a.date desc

【问题讨论】:

标签: join criteria yii


【解决方案1】:

假设您的表结构如下所示

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


        Table2
        ==========================
        colid | col2 | col3 | col4

关系很重要

在 Yii 框架中,ActiveRecords 概念在数据库操作中发挥着巨大的作用。一个 AR 类是指一个数据库表。要执行关系查询,您应该定义表之间的关系。您可以在模型中使用 relations() 方法来执行此操作。请遵守以下语法。

如果 Table1 中的关系实体比 Table2 中的关系实体多,则关系船应为

 class Table1 extends CActiveRecord
 {
     public function relations()
     {
          return array(
              'table2' => array(self::HAS_MANY, 'Table2', 'colid'),
          );
     }
 }

这里,Table2也和Table1有关系。即,

 class Table2 extends CActiveRecord
 {
     public function relations()
     {
          return array(
              'table1' => array(self::BELONGS_TO, 'Table1', 'colid'),
          );
     }
 }

如果您的程序中现在有这些指令,您就有资格执行关系查询。

使用 CDbCriteria

    $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;

你可以用一行做同样的事情

     $info = Table1::model()->findByPk(1);
     echo ($info->table2[0]->col2);

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

【讨论】:

  • 如果使用'table2' =&gt; array(self::HAS_MANY, 'Table2', 'colid', 'joinType'=&gt;'INNER JOIN'), 加入就不需要使用CDbCriteria了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
相关资源
最近更新 更多