【问题标题】:Yii determining existence of related modelsYii 确定相关模型的存在
【发布时间】:2012-11-03 15:20:22
【问题描述】:

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

谁能告诉我这是如何在 Yii 中完成的?

只是一点点上下文以防万一-

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

问题调查 已回答问题

SurveyQuestion HAS_MANY AnsweredQuestion

因此,我想返回不存在相关 AnsweredQuestion 的 QuestionSurvey 模型。

提前致谢,

尼克

【问题讨论】:

    标签: web-applications activerecord yii findall


    【解决方案1】:

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

    ...我想。

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

    如果这是一个单一实例类型的事情,而不是更永久的关系,那么你可以这样做:

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

    【讨论】:

    • 这不是我的意思。 AnsweredQuestion 模型旨在指示已经回答了哪些问题。因此,如果有相关记录,我不希望包含父记录。我认为这与你所说的相反。你知道如何扭转 Yii 的自然行为吗?
    • 不完全。 AnsweredQuestions 不包含答案,它只列出已经回答的内容。我想获取没有任何相关 AnsweredQuestion 的 SurveyQuestion 列表。这可能吗?
    • 感谢您的帮助,这正是我想要的。如果您有兴趣,它会引发另一个关于仅返回与用户相关的记录的问题-stackoverflow.com/questions/13211257/…
    • 根据docswith默认为LEFT OUTER JOIN,将收集所有有/无关系的记录!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    相关资源
    最近更新 更多