我想运行一个只能返回相关记录不存在的记录的findAll查询。
有谁能告诉我Yii是如何做到的?
如果它有帮助,只需要一点上下文 -
我正在研究一个调查应用程序,我正在使用的对象是 -
QuestionSurvey AnsweredQuestion
SurveyQuestion HAS_MANY AnsweredQuestion
因此,我希望返回QuestionSurvey模型,其中不存在相关的AnsweredQuestion。
提前致谢,
尼克
答案 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();