【发布时间】:2018-12-06 13:06:09
【问题描述】:
我涉及 3 个表:UsersTable、RolesTable、UsersRolesTable
我想在注册时为用户分配给定的角色,但它没有将数据保存到连接表(UsersRolesTable),我不知道为什么。
存在以下关联:
用户表
$this->belongsTo('Roles', [
'foreignKey' => 'user_id',
'targetForeignKey' => 'role_id',
'joinTable' => 'users_roles'
]);
角色表
$this->belongsToMany('Users', [
'foreignKey' => 'role_id',
'targetForeignKey' => 'user_id',
'joinTable' => 'users_roles'
]);
UsersRolesTable
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Roles', [
'foreignKey' => 'role_id',
'joinType' => 'INNER'
]);
在我的用户控制器中,我有以下功能
public function register()
{
$roles = TableRegistry::get('Roles');
$role_data = $roles->findByName('User')->first();
$user = $this->Users->newEntity();
if ($this->request->is('post')) {
$data = $this->request->getData();
$user->profile = $this->Users->setDefaultProfile();
$user->role = $role_data;
$user = $this->Users->patchEntity($user, $data);
if ($this->Users->save($user)) {
$this->Flash->success(__('Ihr Account wurde erfolgreich angelegt. Sie können sich nun einloggen.'));
return $this->redirect(['action' => 'login']);
}
$this->Flash->error(__('Ihr Account konnte nicht angelegt werden. Bitte versuchen Sie es später erneut.'));
}
$this->set(compact('user'));
}
我从 cakephp 的书中读到了,但我无法让它工作,也无法很好地理解它。
有人可以看到或解释我在这里犯的错误吗?
如果您需要更多信息,请告诉我。
【问题讨论】:
-
您是否确认
$role_data被正确读取,并且不只是空值?在您尝试保存之前,您的$user实体是什么样的? -
@GregSchmidt 我设法做对了。这是数据库中的错误,因为我烘焙了代码,Join-Table 的表名必须是“roles_users”,否则 Cake 无法获得正确的关系(我想知道为什么......)。是不是很高兴发现。这意味着我必须删除 UsersRoles 的所有 MVC,因为它们定义了错误的关系。我也不得不
$roles->findByName('User')->toArray();而不是->toList();
标签: cakephp-3.0 model-associations