我有三个模型如下:
位置hasMany SportType有很多运动,然后 体育属于SportType属于位置
在SportType模型中,belongsTo位置具有条件'Location.status'=>为true,它只检索Location状态为true的记录。工作正常。
当通过Sport模型中的普通旧find()检索记录时,我会假设它不会返回相关SportType的相关位置为假的记录,但事实并非如此。
我相信我可以在我的控制器中使用可包含的行为或显式构造的连接来获得我想要的东西,但我想知道这是否是我可以完全通过模型关系实现的。也许不是。
答案 0 :(得分:1)
您可以使用Joins
或更改您正在搜索的模型,并通过限制模型(即Location
)执行此操作。
$this->Location->find('all', array(
'conditions' => array(
'Location.status' => true
),
'contain' => array(
'SportType' => array(
'Sport'
)
)
));
但是,您无法根据所包含模型中的条件缩小搜索模型的结果。
<强>更新强>
连接还允许你向其他模型添加更多条件......等等,而不是包含没有的包含,所以我认为我倾向于使用连接,因为这会让你更加灵活地前进。
此外,JOIN将执行一个更复杂的查询,而包含将执行许多更简单的查询...因此,根据您的数据库结构,可以考虑这一点。
底线,它的偏好 - 两者都很好,无论哪种方式都适合你。