2010-09-16 71 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