我有一个名为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'
然后我如何获得属于该组的所有用户。
答案 0 :(得分:0)
首先,您对连接表的命名不遵循CakePHP约定。它应该是groups_users(模型名称:GroupsUser)而不是groups_join或表名称。另见this pag e。
您的协会应该是:
当用户只能属于一个用户组时,根本不需要连接表。如果你现在尝试相同的查询(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'
)
);
}
希望这会有所帮助。