hasMany在Cake PHP中无法正常工作

时间:2013-07-08 09:20:50

标签: php cakephp

我有一个名为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'

然后我如何获得属于该组的所有用户。

3 个答案:

答案 0 :(得分:0)

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

您的协会应该是:

  • 用户hasAndBelongsToMany UsersGroup
  • UsersGroup belongsTo User
  • UsersGroup belongsTo UserGroup

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

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

答案 1 :(得分:0)

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

答案 2 :(得分: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'
        )
    );
}

希望这会有所帮助。