2013-02-16 81 views
2

我有三個型號CakePHP的型號如下是:與相關條件

位置的hasMany SportType的hasMany運動,然後 運動屬於關聯SportType屬於關聯位置

在SportType模型中,屬於關聯的位置有一個條件「 Location.status'=> true,這樣它只會檢索位置狀態爲true的記錄。工作正常。

當通過體育模型中的普通舊find()檢索記錄時,我會假定它不會返回關聯SportType的相關位置爲false的記錄,但事實並非如此。

我相信我可以在控制器中使用可容忍的行爲或顯式構造的連接來獲得我想要的,但我想知道這是否可以純粹通過模型關係實現。也許不是。

回答

1

您可以使用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