php - Laravel 为新创建的用户添加角色
问题描述
我正在从我已经创建的 CRUD 创建一个新用户,但是,我不知道如何为我们正在创建的用户分配一个角色。我正在使用 Laravel 和 3 张桌子。我有 1 个表是我的用户表,1 个表是我的角色表,还有 1 个表是我的角色和用户之间的桥接表。我之所以这样做,是因为我的用户可以为自己分配多个角色。
我现在的问题是如何给用户一个角色以及如何将用户保存到我之前提到的所有表中。请记住,我是从一个杂物开始工作的,所以我有一个创建视图。
问候并感谢所有帮助!
解决方案
假设您有这些表:
users
roles
role_user
哪里role_user
有一个role_id
和一个user_id
列。然后你的模型看起来像:
class User extends Model
{
/**
* Roles relationship.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function roles(): BelongsToMany
{
return $this->belongsToMany(Role::class);
}
}
class Role extends Model
{
/**
* Users relationship.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function users(): BelongsToMany
{
return $this->belongsToMany(User::class);
}
}
并且因为它是一个BelongsToMany
关系,您可以使用sync
orsyncWithoutDetaching
方法来添加或同步用户角色。或者attach()
用于向用户添加单个角色。例如:
// The $role variable can be a model instance, or an ID of the role.
$role = Role::all()->random();
$user = User::all()->random();
$user->roles()->syncWithoutDetaching($role);
// or
$user->roles()->attach($role);
我建议查看管理关系的文档(链接)。因为sync
例如删除给定模型或 ID 数组中未提供的关系以进行同步 - 如果您不知道这种行为,这将导致意外行为。
推荐阅读
- vba - 过滤范围和表格的区别
- excel - 无法将 VBA 字典返回到另一个函数
- android - Firebase ML Kit:标签检测器导致内存消耗快速增加
- angular - Angularfire在signInWithPopup()之后无法重定向
- php - htaccess 将目录重写为 php 页面
- javascript - 我应该在这个用例中使用 WebSocket
- html - VBA 更改 ARIA 控件值
- db2 - DB2/400:ALTER TABLE 外键
- ansible - 当引导集群脚本永远运行时,如何移动到下一个 ansible 任务?
- html - 模态正文中的文本未显示