SQL查询到Cdbcriteria

时间:2013-09-14 01:31:20

标签: yii

我有像这样的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中,如果有其他方式我想知道它)

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:2)

您可以在标准中使用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

相关问题