Cakephp HABTM选择似乎忽略了连接表

Cakephp HABTM选择似乎忽略了连接表,cakephp,has-and-belongs-to-many,Cakephp,Has And Belongs To Many,更新#2--找到解决方案: 结果表明我使用了此查找: $this->User->Group->find(....) 这不是我需要的。要拉出我需要使用的用户组,请执行以下操作: $this->User->find('all',array('conditions' => array('User.id' => $user_id))); 我试图在用户表和组表之间建立HABTM关系。问题是,我发出此呼叫时: $this->User->Group-

更新#2--找到解决方案: 结果表明我使用了此查找:

$this->User->Group->find(....)
这不是我需要的。要拉出我需要使用的用户组,请执行以下操作:

$this->User->find('all',array('conditions' => array('User.id' => $user_id)));

我试图在
用户
表和
表之间建立HABTM关系。问题是,我发出此呼叫时:

$this->User->Group->find('list');
发出的查询是:

SELECT [Group].[id] AS [Group__id], [Group].[name] AS [Group__name] FROM [groups] AS [Group] WHERE 1 = 1
在这一点上,我只能假设我定义的关系是错误的,因为我希望行为使用数据库中按照约定定义的
groups\u users
表。我的关系:

class User extends AppModel {
        var $name = 'User';
        //...snip...
    var $hasAndBelongsToMany = array(
        'Group' => array(
            'className'             => 'Group',
            'foreignKey'            => 'user_id',
            'associationForeignKey' => 'group_id',
            'joinTable'             => 'groups_users',
            'unique'                => true,
        )
    );
        //...snip...
}

class Group extends AppModel {
    var $name = 'Group';
    var $hasAndBelongsToMany = array ( 'User' => array(
        'className'             => 'User',
        'foreignKey'            => 'group_id',
        'associationForeignKey' => 'user_id',
        'joinTable'             => 'groups_users',
        'unique'                => true,
    ));
}
我对HABTM的理解是错误的吗?如何实现这种多对多关系,使用CakePHP查询
groups\u users
表,以返回当前已验证用户关联的组列表

更新

应用ndm建议的更改后,我仍然会收到一个大数组返回(太大,无法发布),它返回所有组,然后返回一个
'User'
元素(如果用户是该组的成员)。我再次查看了CakePHP使用的查询:

SELECT 
    [User].[id] AS [User__id], 
    [User].[username] AS [User__username], 
    [User].[password] AS [User__password], 
    [User].[email] AS [User__email], CONVERT(VARCHAR(20), 
    [User].[created], 20) AS [User__created], CONVERT(VARCHAR(20), 
    [User].[modified], 20) AS [User__modified], 
    [User].[full_name] AS [User__full_name], 
    [User].[site] AS [User__site], 
    [GroupsUser].[user_id] AS [GroupsUser__user_id], 
    [GroupsUser].[group_id] AS  [GroupsUser__group_id], 
    [GroupsUser].[id] AS [GroupsUser__id] 
FROM 
    [users] AS [User] JOIN 
        [groups_users] AS [GroupsUser] ON (
        [GroupsUser].[group_id] IN (1, 2, 3, 4, 5) AND 
        [GroupsUser].[user_id] = [User].[id]
    ) 
有没有一种简单的方法来改进它,使我只收到我拥有成员资格的条目的组ID和名称?我正在考虑使用:

array('conditions'=>array('GroupsUser.user_id'=>$user_id))
…但我在groups表上收到一个sql错误:

SELECT TOP 1 [Group].[name] AS [Group__name], CONVERT(VARCHAR(20), [Group].[created], 20) AS [Group__created], CONVERT(VARCHAR(20), [Group].[modified], 20) AS [Group__modified], [Group].[id] AS [Group__id] FROM [groups] AS [Group] WHERE [GroupsUser].[user_id] = 36 ORDER BY (SELECT NULL) 

我想你只是误解了
列表
查找类型的作用

查询完全正常,
list
find类型仅用于检索单个模型的记录列表,其中模型用作索引,而查找类型用作值


仅供参考,您只需要两行代码(每个型号一行)是:
public$hasandbelongtomany=array('User')
public$hasandbelongtomany=array('Group')所有其他都是多余的,因为它们已经是默认值。我已经更改了模型。谢谢@DaveAh抱歉<代码>“列表”
只是最新的版本,因为在问这个问题之前,我开始尝试暴力解决方案。使用
'all'
参数,我得到一个庞大的列表,其中再次包含所有可用的组,但仅将
'User'
部分嵌套到我的用户拥有成员资格的组中。这正常吗?我可以改进搜索吗?使用
字段
条件
似乎打破了查询,在我使用
数组(条件=>数组('User.username'=>$User\u id))
更正时给出了错误。我想我已经修好了。我将我的
find
更改为:
$this->User->find('all',array('conditions'=>array('User.id'=>$User\u id))
额外的$this->user->
导致了查找问题。非常感谢。