在 hasAndBelongsToMany (HABTM) Cakephp 方面需要帮助
Posted
技术标签:
【中文标题】在 hasAndBelongsToMany (HABTM) Cakephp 方面需要帮助【英文标题】:Need help with hasAndBelongsToMany (HABTM) Cakephp find 【发布时间】:2010-09-16 18:38:23 【问题描述】:我正在尝试在 Cakephp 1.3 中查询 hasAndBelongsToMany 关系,但看起来正在运行的 SQL 查询并未对多对多表进行联接。
我有一个 users 表、projects 表和 users_projects 表。我想在单独的分配控制器中获取用户关联的所有项目的列表。
我一直在阅读有关该主题的 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 中以多对多关系获取给定用户的项目列表的正确语法是什么?
【问题讨论】:
【参考方案1】:可能是因为你没有让两个表名按字母顺序连接。users_projects
应该是projects_users
。
【讨论】:
@mrlanrat,但是您希望查询结果是什么样的? 我只想要与给定用户关联的项目和项目的 ID。 @mrlanrat,你已经这样做了,因为你已经指定了Project.user_id
。
我损失了 4 个小时,只是我的 hasandbelongstomany 表的名称被颠倒了....上帝保佑【参考方案2】:
您收到此错误是因为您使用的是查找类型“list”。 Cake 的默认行为是在使用这种查找类型时选择 ID 和 NAME 字段。
将您的查找类型更改为“全部”以检索您期望的结果:
var_dump($this->Allocation->User->Project->find('list',array('conditions'=>array('Project.user_id'=>'21'))));
【讨论】:
当更改为 all 时,我仍然得到同样的错误。这是 SQL 输出: 查询:SELECTProject
.id
, Project
.name
, Project
.description
, description
, Project
.created
, Project
.@98765@32 F@ROM 987654333@ AS Project
WHERE Projects
.user_id
= '21'
我还希望返回的数据是列表格式,以便在 html 表单中使用。
在 User 和 Project 模型中重命名连接表后,您是否也更改了 'joinTable' => 'users_projects'?以上是关于在 hasAndBelongsToMany (HABTM) Cakephp 方面需要帮助的主要内容,如果未能解决你的问题,请参考以下文章
CakePHP hasAndBelongsToMany (HABTM) 删除加入记录
CakePHP模型hasAndBelongsToMany关联
带有“hasAndBelongsToMany”的控制器的 CakePHP 条件查询
PHP CakePHP模型hasAndBelongsToMany关联