需要Hasandbelongostany(HABTM)Cakephp查找帮助吗

需要Hasandbelongostany(HABTM)Cakephp查找帮助吗,cakephp,has-and-belongs-to-many,Cakephp,Has And Belongs To Many,我试图在Cakephp 1.3中查询HasandBelongToMany关系,但看起来正在运行的SQL查询没有对多对多表进行连接 我有一个users表、projects表和users\u projects表。我想在一个单独的分配控制器中获得一个用户关联的所有项目的列表 我一直在读关于这个主题的cakephp书: 所以我一直在尝试: var_dump($this->Allocation->User->Project->find('list',array('condition

我试图在Cakephp 1.3中查询HasandBelongToMany关系,但看起来正在运行的SQL查询没有对多对多表进行连接

我有一个users表、projects表和users\u projects表。我想在一个单独的分配控制器中获得一个用户关联的所有项目的列表

我一直在读关于这个主题的cakephp书:

所以我一直在尝试:

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

由于使用的是查找类型“”,因此出现此错误。Cake的默认行为是在使用此查找类型时选择ID和NAME字段

将“查找类型”更改为“全部”,以检索所需的结果:


var\u dump($this->Allocation->User->Project->find('list',array('conditions'=>array('Project.User\u id'=>'21'))

可能是因为您没有按字母顺序将两个表名连接起来。
用户\u项目
应该是
项目\u用户

当更改为“全部”时,我仍然会收到相同的错误。下面是SQL输出:查询:选择
项目
id,
项目
名称,
项目
说明,
项目
已创建,
Project
projects
修改为
Project
其中
projects
user\u id
='21'我还希望返回的数据采用列表格式,以html格式使用。在重命名用户和项目中的联接表后,您是否也更改了“joinTable”=>“users\u projects”模型?@mrlanrat,但您希望您的查询结果是什么样的?我只想要与给定用户关联的项目和项目id。@mrlanrat,您已经这样做了,因为您指定了
Project.user\u id
。我损失了4个小时,只是我的Hasandbelongtomany表的名称被颠倒了。。。。上帝保佑