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