1

我有一个这样的 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 中)

4

2 回答 2

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

于 2013-09-14T09:40:52.067 回答
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',
));

请注意,您可以将 a 的属性传递CDbCriteriafindAll()

于 2013-09-14T08:26:03.713 回答