我正在尝试查询Cakephp 1.3中的hasAndBelongsToMany关系,但看起来正在运行的SQL查询没有在多对多表上进行连接。
我有一个users表,projects表和users_projects表。我想在单独的Allocations控制器中获取用户所关联的所有项目的列表。
我一直在阅读关于这个主题的蛋糕书: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 :(得分:2)
也许那是因为你没有按字母顺序连接两个表名。users_projects
应该是projects_users
。
答案 1 :(得分:0)
您收到此错误是因为您使用的是查找类型“list”。 Cake的默认行为是在使用此查找类型时选择ID和NAME字段。
将您的查找类型更改为“全部”以检索您期望的结果:
var_dump($this->Allocation->User->Project->find('list',array('conditions'=>array('Project.user_id'=>'21'))));