2011-03-24 103 views
1

我有一個使用images_units連接表的模型Image和Units之間的多對多關係。如何獲得CakePHP的多對多結果

如何將此查詢翻譯成cakePHP find()?

SELECT * FROM Image, Units, images_units WHERE images_units.unit_id = 29; 

現在我試圖找到()上Image-> find('all',$ params);沒有運氣。從CakePHP的手冊

+0

無論如何,該查詢無法正常工作,根本沒有查看連接表。 – Dunhamzzz 2011-03-24 15:58:13

+0

對不起,我現在編輯:) – 2011-03-24 16:20:58

回答

1

直:

$this->Image->bindModel(array('hasOne' => array('ImagesUnit'))); 
$this->Image->find('all', array('fields' => array('Image.*'),'conditions' => array('ImagesUnit.unit_id' => 29))); 

當然,你需要在模型中定義的HABTM關聯。 See the whole section on HABTM瞭解如何使用它。

+0

非常感謝!正是我在找的東西:)我會看看文檔。 – 2011-03-25 07:39:59

+0

由於沒有在控制器中綁定模型,您還可以在模型中使用以下命令: var $ hasOne ='ImagesUnit'; 這意味着你可以跳過第一行: $ this-> Image-> bindModel(array('hasOne'=> array('ImagesUnit'))); – 2011-03-25 09:02:03

+0

噢,的確如此。我提出了一些「最佳實踐」(不一定是社區的最佳實踐),其中之一就是在模型中定義這種關聯,而不是實時綁定它。如果您需要處理未關聯的模型,則可以使用[loadModel](http://book.cakephp.org/view/992/loadModel)方法。我總是推薦刪除遞歸功能,而不是選擇Containable行爲。這[電子書]解釋了這種可容忍的技術。 – YOMorales 2011-03-25 18:39:17

0

在你的圖像模型,添加以下代碼:

$hasAndBelongsToMany = 'Unit'; 

Images控制器find()應該是這樣的:

$this->Image->find('all', array('conditions'=>array('Unit.id'=>29))); 

仍不能肯定這是你在找什麼但我認爲這是正確的。

+0

嘗試,在給出醫學「SQL錯誤:1054:未知列'Unit.id'在'where子句'」上查詢:選擇'圖像'''''','圖像'''''','圖像'''''''從'圖像'作爲'圖像'在'單元''''''= 30 – 2011-03-25 07:33:01