与相关条件

问题描述:

我有三个型号CakePHP的型号如下是:与相关条件

位置的hasMany SportType的hasMany运动,然后 运动属于关联SportType属于关联位置

在SportType模型中,属于关联的位置有一个条件“ Location.status'=> true,这样它只会检索位置状态为true的记录。工作正常。

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

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

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

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

但是你可以根据包含在模型中的条件不缩小搜索模型的结果。

更新:

加入也让你添加更多条件等车型...等,而不是含有不,所以我认为我会朝着与去瘦加入为叶你有更大的灵活性前进。

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

底线,这是首选 - 两者都很好,无论哪一个对你很好。

+0

啊,我明白了。感谢您的澄清。两种方法都被认为优越吗?当我列出所有体育项目时,我正在考虑通过体育模式和体育/索引路线来推导这一点。但是我现在看到它可能是像location/list_sports这样的东西。我是cakePHP的新手,只是试图让我的头靠近它。 – drpudding 2013-02-16 06:34:02

+0

@ user1146981 - 更新的答案和一些澄清 – Dave 2013-02-16 15:56:42