4

我有一个名为 group_joins 的表:上表的字段就像,

1)id,
2)group_id,
3)user_id,
4)created

另外两个表是users和user_groups,group_id引用user_groups表的主键,user_id引用users表的主键。

现在我创建了一个名为 GroupJoin 的模型,我想将上面的两个表(users,user_groups)表与 group_joins 关联,我可以获取所有加入该组的用户。

我将 group_id 作为参数传递给操作。我必须获取属于该组的所有用户。

我的模型如下:

var $belongsTo = array(
    'UserGroup' => array(
        'className' => 'UserGroup',
        'foreignKey' => 'group_id'
        )
    );

var $hasMany = array(   
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'user_id',
        'conditions' => '',     
        )
    );

在我的控制器中,查询如下:

$groupArrs = $this->GroupJoin->find('all',array('conditions'=>'GroupJoin.group_id ="'. $group_id.'"'));

但它显示 SQL 错误:1054:“字段列表”中的未知列“User.user_id”

那么我如何获得属于该组的所有用户。

4

3 回答 3

0

使用数据库中的用户表创建 user_id 作为外键。

于 2014-07-08T10:18:23.763 回答
0

我认为最好效仿 burzum 的例子。

你的模型看起来像这样:

class User extends AppModel{
        public $hasMany = array(
      'UserGroup' => array(
          'className' => 'UserGroup',
           'foreignKey' => 'user_id'
        )
    );        
}

class Group extends AppModel{
    public $hasMany = array(
        'UserGroup' => array(
           'className' => 'UserGroup',
           'foreignKey' => 'group_id'
    )
    );

}
class UserGroup extends AppModel{
    public $belongsTo = array(
        'User' => array(
          'className' => 'User',
          'foreignKey' => 'user_id',
       ),
       'Group' => array(
         'className' => 'Group',
         'foreignKey' => 'group_id'
        )
    );
}

希望这会有所帮助。

于 2015-04-12T16:06:28.607 回答
0

首先,您对连接表的命名不遵循 CakePHP 约定。它应该是 groups_users(模型名称:GroupsUser)而不是 groups_join 或任何表名。另见本页e。

您的关联应该是:

  • 用户 hasAndBelongsToMany UsersGroup
  • 用户组属于用户
  • 用户组属于用户组

当一个用户只能属于一个用户组时,您根本不需要连接表。如果您现在尝试相同的查询 (UsersGroup.group_id => $groupId),它应该可以工作。

此外,您没有遵循 CakePHP 中变量名的约定:它应该是 $groupId 而不是 $group_id。并使用适当的可见性范围关键字而不是“var”。

于 2013-07-08T10:48:29.787 回答