【问题标题】:SQL Query to Cdbcriteria对 Cdbcriteria 的 SQL 查询
【发布时间】:2013-09-14 01:31:20
【问题描述】:

我有一个这样的 SQL 查询

SELECT * 
FROM nu.tb_class t 
WHERE NOT EXISTS (SELECT st_id FROM student_class s WHERE s.st_id = t.id)

我需要这个把它 Cdbcriteria 能告诉我怎么做吗?

(如果有其他我想知道的方法,我需要把这些数据放到 CGridView 中)

【问题讨论】:

  • 你有这两个模型之间的关系吗?如果有,你可以在这里发布这个关系吗?

标签: yii


【解决方案1】:

您可以在您的条件中使用 NotInCondition
http://www.yiiframework.com/doc/api/1.1/CDbCriteria#addNotInCondition-detail

注意:它需要一个数组,这意味着您必须仅选择 st_id 列,并将其传递给 addNotInCondition 函数...简单的方法是:

$st_ids = CHtml::listData(StudentClass::model()->findAll($criteria)), 'column1', 'column2');

当然,您可以将其作为 sql 查询运行,然后使用 CArrayDataProvider
http://www.yiiframework.com/doc/guide/1.1/en/database.dao#executing-sql-statements
http://www.yiiframework.com/doc/api/1.1/CArrayDataProvider

【讨论】:

    【解决方案2】:

    您可以将该查询转换为等效的 LEFT JOIN 查询:

    $classes = TbClass::model()->findAll(array(
        'condition' => 's.st_id IS NULL',
        'join' => 'LEFT JOIN student_class s ON t.id=s.st_id',
    ));
    

    请注意,您可以将CDbCriteria 的属性传递给findAll()

    【讨论】:

      猜你喜欢
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      相关资源
      最近更新 更多