2011-04-24 12 views
0

我們有Ebooks HABTM標籤。我們嘗試選擇屬於id = 160的標籤的電子書。相關型號中包含的意外行爲

兩者都使用中可容納的行爲,所以在電子書控制器我寫了下面的:

$this->Ebook->contain('Tag.id = "160"'); 
$ebooks = $this->Ebook->find('all'); 

根據書中,應返回所需的結果。取而代之的是,所有電子書的清單都會收回。

還要注意,有兩個查詢運行,第一個返回所有電子書的列表,第二個返回應該返回的電子書。有人有什麼主意嗎?

在此先感謝

回答

2

是,這個查詢說「查找所有電子書,並與他們包括id爲160的所有標籤」
contain不限制主要結果,僅限於相關結果。

你需要做一個SQL JOIN到HATBM表,並在其過濾你的初步結果,就像這樣:

$this->Ebook->bindModel(array('hasOne' => array('EbooksTag'))); 
$this->Ebook->find('all', array(
    'conditions' => array('EbooksTag.tag_id' => 160) 
)); 
+0

謝謝您的回答。這讓我的生活更輕鬆! – 2011-04-25 17:58:26

+0

這可以用作一個更簡單的方法來解決我的問題[這裏](http://stackoverflow.com/questions/5655977/cakephp-problem-with-habtm-paginate-query)? – Dave 2011-04-26 01:15:21

+0

@Dave HABTM關係很難查詢。需要記住的規則是,Cake會自動爲belongsTo創建JOIN,並在「主要」查詢(包含條件的查詢)中擁有一個關係,而hasMany和HABTM關係將單獨查詢(必要時,因爲它們返回的數據多於一行)。有時,明確指定'joins'會更容易,有時綁定模型更容易,有時更容易從其他模型*中查詢*。繼續玩吧。 :) – deceze 2011-04-26 01:23:34