2

我有三个模型,如下所示:

Location hasMany SportType hasMany Sport, then Sport belongsTo SportType belongsTo Location

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

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

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

4

1 回答 1

1

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

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

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

更新:

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

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

最重要的是,这是偏好 - 两者都很好,适合你的都很棒。

于 2013-02-16T06:10:09.890 回答