在HasAndBelongsToMany(HABTM)的Cakephp上找到帮助

时间:2010-09-16 18:38:24

标签: cakephp has-and-belongs-to-many

我正在尝试查询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的多对多关系中获取给定用户的项目列表的正确语法是什么?

2 个答案:

答案 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'))));

相关问题