我有三个表:用户表、角色表sersRolesTable
我想在注册时为用户分配一个给定的角色,但它不会将数据保存到联接表(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'
]);
用户角色表
$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'));
}
我在cakepp读了这本书,但我无法让它发挥作用,也无法很好地理解它。
有人能看到或解释我在这里犯的错误吗?
如果您需要更多信息,请告诉我。
问题是,整个skelleton都被烘焙了,我没有遵循这个特定联接表的命名约定。
来自CakePHP-惯例
在BelongToo模型之间的许多关系中使用的联接表应该以它们将要联接的模型表命名,否则烘焙命令将不起作用,按字母顺序排列(articles_tags而不是tags_articles(。如果需要在连接表上添加其他列,则应为该表创建一个单独的实体/表类。
因此,我的关系定义错误。我不得不删除UsersRoles的MVC,将表从users_roles
重命名为roles_users
,然后再次烘焙。
还有另一种方法可以处理这个问题,并使用"错误"命名的表,但我决定根据约定更改数据库,因为我在应用程序的其他部分都遵循了这些约定。
但是!我将在不久的将来重新配置这个场景,并通过自定义命名联接表来解决这个问题。