Web applications Yii查询不返回任何结果

Web applications Yii查询不返回任何结果,web-applications,yii,findall,Web Applications,Yii,Findall,我正在努力用Yii创建正确的查询,但我相信我正在取得进展 我需要检查一个相关表,只想返回相关表中没有记录的记录。这里回答了这个问题- 使问题复杂化的是,我不确定如何克服它,因为多个用户可以在这个相关的表中有记录。因此,完整的要求是返回不存在相关记录的记录,而只计算登录用户的记录 这两个相关对象如下所示- 调查问题 回答问题 调查问题有很多答案 AnsweredQuestion表有以下列- id-调查\问题\ id-用户\ id survey_question_id是SurveyQuestion表

我正在努力用Yii创建正确的查询,但我相信我正在取得进展

我需要检查一个相关表,只想返回相关表中没有记录的记录。这里回答了这个问题-

使问题复杂化的是,我不确定如何克服它,因为多个用户可以在这个相关的表中有记录。因此,完整的要求是返回不存在相关记录的记录,而只计算登录用户的记录

这两个相关对象如下所示- 调查问题 回答问题

调查问题有很多答案

AnsweredQuestion表有以下列-

id-调查\问题\ id-用户\ id

survey_question_id是SurveyQuestion表的外键

到目前为止,我的方法是尝试将记录限制为与使用关系定义登录的用户相关的记录-

public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'survey_answer'=>array(self::HAS_MANY,'SurveyAnswer','survey_question_id'),
        'answered_questions' => array(self::HAS_MANY, 'AnsweredQuestion', 'question_id',
            'condition'=>'answered_questions.user_id = '.Yii::app()->user->id,
            'joinType'=>'LEFT JOIN',
            ),
    );
}
为了将查询限制为父表中没有相关记录的记录,我在findAll函数中使用了如下条件-

            $questions = SurveyQuestion::model()->with(array(
                                            'survey_answer',
                                            'answered_questions'=>array(

                                                    'select'=>false,

                                                    'joinType'=>'LEFT JOIN',
                                                    'condition'=>'`answered_questions` . `id` is NULL'
                                                    ),))->findAll();
即使清除了子表,这两段代码也不会返回任何结果

有人能指出我在方法或执行上的错误吗

非常感谢,

尼克

更新

根据请求,下面是运行的sql语句。第二个连接是相关的,第一个连接收集多项选择答案

SELECT `t`.`id` AS `t0_c0`, `t`.`area_id` AS `t0_c1`,
`t`.`question_text` AS `t0_c2`, `t`.`date_question` AS `t0_c3`,
`survey_answer`.`id` AS `t1_c0`, `survey_answer`.`survey_question_id` AS
`t1_c1`, `survey_answer`.`answer_text` AS `t1_c2`, `survey_answer`.`tag_id`
AS `t1_c3` FROM `tbl_survey_questions` `t`  LEFT OUTER JOIN
`tbl_survey_answers` `survey_answer` ON
(`survey_answer`.`survey_question_id`=`t`.`id`)  LEFT JOIN
`tbl_answered_questions` `answered_questions` ON
(`answered_questions`.`question_id`=`t`.`id`)  WHERE
((answered_questions.user_id = 2) AND (`answered_questions` . `id` is
NULL))

在我发布关于可视化运行您的查询的评论后,我有一个想法

我认为您需要将
user\u id
的条件放在关系的
on
子句中,而不是放在
condition
子句中。因为它只返回父行,其中子行的
NULL
id和
user\u id
为2。这显然永远不会发生。但您需要将其放在
JOIN
条件中。因此,它应该是:

'answered_questions' => array(self::HAS_MANY, 'AnsweredQuestion', 'question_id',
    'on'=>'answered_questions.user_id = '.Yii::app()->user->id,
    'joinType'=>'LEFT JOIN',
),

在我发布关于可视化运行您的查询的评论后,我有一个想法

我认为您需要将
user\u id
的条件放在关系的
on
子句中,而不是放在
condition
子句中。因为它只返回父行,其中子行的
NULL
id和
user\u id
为2。这显然永远不会发生。但您需要将其放在
JOIN
条件中。因此,它应该是:

'answered_questions' => array(self::HAS_MANY, 'AnsweredQuestion', 'question_id',
    'on'=>'answered_questions.user_id = '.Yii::app()->user->id,
    'joinType'=>'LEFT JOIN',
),

通过查看日志,您可以看到它实际上正在构造什么样的SQL吗?打开日志并在数据库连接上启用评测。谢谢你,我以前从来没有打开过评测功能。我已经添加了它运行的sql。您是否安装了PHPMyAdmin或任何其他sql接口,您可以通过可视化方式对数据库运行该接口?我看不出这个查询有什么明显的错误。你能通过查看日志看到它实际上在构造什么SQL吗?打开日志并在数据库连接上启用评测。谢谢你,我以前从来没有打开过评测功能。我已经添加了它运行的sql。您是否安装了PHPMyAdmin或任何其他sql接口,您可以通过可视化方式对数据库运行该接口?我看不出这个问题有什么明显的错误。谢谢你,这很有道理。希望我在输入代码后就快到了,但它不能识别't.id'作为列。你认为在工作中有一个常见的新手错误吗?我更新了我的例子。我忘了我会让你在条件下附加到
,而不是完全覆盖它。这太棒了,这会提供所需的行为。非常感谢你对我的问题的帮助。我从没想过我能解决这个问题,在这个过程中我从你那里学到了很多。干杯很好,很高兴你成功了。我不知道你是否看过,但你每天花30分钟浏览一下Yii出色的自编指南的要点是非常值得的。我以前看过,但我会按照你的建议更全面地介绍一下。塔坦克斯:这很有道理。希望我在输入代码后就快到了,但它不能识别't.id'作为列。你认为在工作中有一个常见的新手错误吗?我更新了我的例子。我忘了我会让你在
条件下附加到
,而不是完全覆盖它。这太棒了,这会提供所需的行为。非常感谢你对我的问题的帮助。我从没想过我能解决这个问题,在这个过程中我从你那里学到了很多。干杯很好,很高兴你成功了。我不知道你是否看过,但你每天花30分钟浏览一下Yii出色的自编指南的要点是非常值得的。我以前看过,但我会按照你的建议更全面地介绍一下。助教