【问题标题】:CakePHP Models with associated conditions具有相关条件的 CakePHP 模型
【发布时间】:2013-02-16 02:07:07
【问题描述】:

我有以下三个模型:

Location hasMany SportType hasMany Sport,则 运动属于运动类型属于位置

在 SportType 模型中,belongsTo Location 有一个条件 'Location.status' => true,因此它只检索 Location 状态为 true 的记录。工作正常。

当通过 Sport 模型中的普通旧 find() 检索记录时,我会假设它不会返回关联 SportType 的关联 Location 为 false 的记录,但事实并非如此。

我相信我可以在我的控制器中使用可包含的行为或显式构造的连接来获得我想要的东西,但我想知道这是否是我可以纯粹通过模型关系实现的东西。也许不是。

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    您可以使用Joins 或更改您正在搜索的模型并通过限制模型(即Location)进行搜索。

    $this->Location->find('all', array(
        'conditions' => array(
            'Location.status' => true
        ),
        'contain' => array(
            'SportType' => array(
                'Sport'
            )
        )
    ));
    

    但是您不能根据包含的模型中的条件缩小搜索模型的结果。

    更新:

    Join 还允许您向其他模型添加更多条件...等等,而 Contain 不允许,所以我想我倾向于使用 Joins,因为这样可以让您在前进时更加灵活。

    此外,JOIN 将执行更复杂的查询,而 contains 将执行许多更简单的查询...因此,根据您的数据库结构,可以考虑这样做。

    归根结底,这是偏好 - 两者都很好,适合你的都很棒。

    【讨论】:

    • 啊,我明白了。感谢您的澄清。任何一种方法都被认为是优越的吗?当我列出所有运动时,我正在考虑通过运动模型和运动/指数路线来推导这一点。但我现在看到它可能类似于 location/list_sports。我是 cakePHP 新手,只是想了解一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    相关资源
    最近更新 更多