2010-09-16 142 views
2

我想查詢Cakephp 1.3中的hasAndBelongsToMany關係,但它看起來像正在運行的SQL查詢不是在多對多的表上執行Join。需要幫助hasAndBelongsToMany(HABTM)CakePHP找到

我有一個用戶表,項目表和users_projects表。我想在單獨的Allocations控制器中獲得用戶所關聯的所有項目的列表。

我一直在閱讀的話題CakePHP的書:http://book.cakephp.org/view/1044/hasAndBelongsToMany-HABTM

所以我一直在努力這樣的:

var_dump($this->Allocation->User->Project->find('list',array('conditions'=>array('Project.user_id'=>'21')))); 

但是不起作用,不會返回任何與此錯誤:

Warning (512): SQL Error: 1054: Unknown column 'Projects.user_id' in 'where clause' [CORE/cake/libs/model/datasources/dbo_source.php, line 681] 

Query: SELECT `Project`.`id`, `Project`.`name` FROM `projects` AS `Project` WHERE `Projects`.`user_id` = '21' 

它看起來像cakephp沒有做所需的連接。

這是在我的項目模型:

var $hasAndBelongsToMany = array(
    'User' => array(
     'className' => 'User', 
     'joinTable' => 'users_projects', 
     'foreignKey' => 'project_id', 
     'associationForeignKey' => 'user_id', 
     'unique' => true, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'finderQuery' => '', 
     'deleteQuery' => '', 
     'insertQuery' => '' 
    ) 

而且這是在我的用戶模型:

var $hasAndBelongsToMany = array(
    'Project' => array(
     'className' => 'Project', 
     'joinTable' => 'users_projects', 
     'foreignKey' => 'user_id', 
     'associationForeignKey' => 'project_id', 
     'unique' => true, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'finderQuery' => '', 
     'deleteQuery' => '', 
     'insertQuery' => '' 
    ) 

那麼,什麼是正確的語法來獲得的項目清單給定用戶關於cakephp中的多對多關係?

回答

0

由於您使用查找類型'list',因此您收到此錯誤。 Cake的默認行爲是在使用此查找類型時選擇ID和NAME字段。

您發現類型更改爲「所有」來獲取您所期待的結果:

var_dump($this->Allocation->User->Project->find('list',array('conditions'=>array('Project.user_id'=>'21'))));

+0

當改變爲所有我仍然得到相同的錯誤。這裏是SQL輸出:Query:SELECT'Project'.'id','Project'.'name','Project'.'description','Project'.'created','Project'.'modified' FROM' projects' AS'Project' WHERE'Projects'.'user_id' ='21' – lanrat 2010-09-16 18:48:55

+0

我也希望返回的數據是以html格式使用的列表格式。 – lanrat 2010-09-16 18:50:13

+0

在用戶和項目模型中重命名連接表之後,您是否還更改了'joinTable'=>'users_projects'? – ABailiss 2010-09-18 10:22:22

2

或許是因爲你並沒有連接按字母順序排列兩個表名。 users_projects應該是projects_users

+0

這有幫助,但代碼仍然沒有加入。 – lanrat 2010-09-17 18:42:29

+0

@ mrlanrat,但你希望你的查詢結果看起來像什麼? – Young 2010-09-19 00:29:33

+0

我只想要項目和與給定用戶關聯的項目的ID。 – lanrat 2010-09-19 19:23:08