2010-12-21 135 views
1

我有兩個表 - usersservers,以及對於HABTM關係,users_servers。用戶HABTM服務器,反之亦然。CakePHP HABTM Filtering

我想找到一種方法讓Cake選擇分配給用戶的服務器。

我正在嘗試像$this->User->Server->find('all');這樣的東西,它只是返回所有的服務器,不管它們是否屬於用戶。

$this->User->Server->find('all', array('conditions' => array('Server.user_id' => 1)))只是給出未知列的SQL錯誤。

我確定我錯過了一些明顯的東西,但只是需要有人指點我在正確的方向。

謝謝!

回答

1

你的表名是正確的。有很多方法可以做到這一點:

使用中可容納的行爲

在你AppModel,設置如下:

var $recursive = -1; 
var $actsAs = array('Containable'); 

然後,使用下面的代碼來查詢您的服務器:

$userWithServers = $this->User->find('all', array(
    'conditions' => array('User.id' => 1), 
    'contain' => array('Server') 
)); 

請注意,我們正在查詢用戶模型,而不是服務器模型來完成此操作。

使用bindModel

$this->Server->bindModel(array('hasOne' => array('UsersServer'))); 
$this->Server->find('all', array(
    'fields' => array('Server.*'), 
    'conditions' => array('Server.user_id' => 1) 
)); 

我個人不推薦使用bindModel很多。最終,你的代碼變得有點難以管理。只要有可能,您應該儘可能使用Containable行爲。代碼看起來更乾淨簡單。更多關於bindModel的方法可以參考here

HTH。

+0

可容納的行爲正是我所期待的。謝謝! – 2010-12-23 20:07:39

0

我想你應該命名遊覽表user_servers。

+0

看看蛋糕手冊我認爲我的方法應該工作? `這個新的連接表名需要包含兩個模型的名稱,按字母順序排列,並用下劃線(_)分開。' – 2010-12-21 19:35:48