我有一个数据库中现有用户角色的列表,例如:
+----+-------+-----------+
| id | level | label |
+----+-------+-----------+
| 1 | 0 | admin |
| 2 | 1 | moderator |
| 3 | 2 | blogger |
+----+-------+-----------+
我想在创建用户时为其添加一个角色。我尝试过的是:
在我的BcUsersController中:
$bcUser = $this->BcUsers->patchEntity($bcUser, $this->request->data,
[
'associated' => [
'BcUserInfos',
'BcUserRoles'
]
]
);
if ($this->BcUsers->save($bcUser))...
协会
//BcUserRolesTable
$this->belongsToMany('BcUsers', [
'className' => 'BcUsers',
'foreignKey' => 'role',
'propertyName' => 'BcUserRoles'
]);
//BcUsersTable
$this->hasMany('BcUserRoles', [
'className' => 'BcUserRoles',
'foreignKey' => 'id',
'bindingKey' => 'role',
'propertyName' => 'BcUserRoles',
'joinTable' => 'bc_user_roles'
]);
这就是我尝试将userRoleId注入用户表的方式:
<?= $this->Form->input('BcUserRoles.level', ['type' => 'hidden', 'value' => '0']); ?>
或
<?= $this->Form->input('BcUserRoles.id', ['type' => 'hidden', 'value' => '1']); ?>
当我尝试保存它时,我没有错误只刷新页面并在字段内部发布数据。如果我删除所有关联代码,它将保存user + userInfo。我在这里缺少什么?
修改
我刚在$bcUser
变量中发现错误:
'[errors]' => [
'role' => [
'_required' => 'This field is required'
]
],
我认为这就是为什么它不能保存BcUser,而且userRole关联也是空的:
'BcUserRoles' => [],
因此即使我愿意删除
,也不会将userRole保存到用户表 来自BcUsersTable的 ->requirePresence('role', 'create')
,不是吗?
刚刚测试过。它抛出了SQL错误,因为角色不在查询参数中,而在数据库中它必须在那里,不允许为null。所有用户都应该有一个角色。
答案 0 :(得分:1)
尝试更新您的belongsTo Relations
$this->belongsTo('BcUsers', [
'className' => 'BcUsers',
'foreignKey' => 'role',
'bindingKey' => 'id',
'propertyName' => 'BcUserRoles'
]);
制作
$this->belongsTo('BcUserRoles', [
'className' => 'BcUsers',
'foreignKey' => 'role',
'bindingKey' => 'id',
]);
希望你的问题能够得到解决
答案 1 :(得分:1)
看起来这里有几个问题。
<强>协会强>
如果BcUsersTable
包含BcUserRoles
的外键,那么它是belongsTo
关系。
belongsTo :当前模型包含外键。
http://book.cakephp.org/3.0/en/orm/associations.html#belongsto-associations
同样,这也意味着BcUserRoles
与hasMany
的{{1}}关系不是BcUsers
关系。
hasMany :其他型号包含外键。
http://book.cakephp.org/3.0/en/orm/associations.html#hasmany-associations
发布数据
我假设belongsTo
中BcUserRolesTable
的外键是BcUsersTable
。这意味着您需要提交role
的值,该值是您要关联的用户角色的role
。
以下内容将创建一个表单元素来执行此操作:
id
其中$this->Form->input('role', ['type' => 'hidden', 'value' => $useRoleId])
是您要关联的角色的ID。