Yii确定相关模型的存在

时间:2012-11-03 15:20:22

标签: web-applications activerecord yii findall

我想运行一个只能返回相关记录不存在的记录的findAll查询。

有谁能告诉我Yii是如何做到的?

如果它有帮助,只需要一点上下文 -

我正在研究一个调查应用程序,我正在使用的对象是 -

QuestionSurvey AnsweredQuestion

SurveyQuestion HAS_MANY AnsweredQuestion

因此,我希望返回QuestionSurvey模型,其中不存在相关的AnsweredQuestion。

提前致谢,

尼克

1 个答案:

答案 0 :(得分:2)

如果您SurveyQuestion::model()->with('AnsweredQuestion')->findAll()这将自动发生。因为它会将所有记录拉到一起由INNER JOIN连接起来(除非你另有说明),因此如果他们没有答案就不会提出任何问题。

......我想。

<强>更新
好的,你的评论,我把它缠在我的头上。您实际上想查看其中不存在SurveyQuestions的所有AnsweredQuestions。在这种情况下,您希望Yii执行LEFT JOIN,如果行不存在,将为连接表下拉NULL记录。然后你需要在关系中添加一个条件,说明AnsweredQuestion.id is NULL的位置(或者你的主键是什么,实际上可以是任何字段,但主键是好的做法)。

如果这是一种单一实例,而不是更长久的关系,那么你可以这样做:

SurveyQuestion::model()->with(array(
    'AnsweredQuestion'=>array(
        'joinType'=>'LEFT JOIN', 
        'condition'=>'`AnsweredQuestion`.`id` is NULL')
    )->findAll();