我正在从已经完成的CRUD中创建一个新用户,但是,我不知道如何为正在创建的用户分配角色。我正在使用Laravel和3张桌子。我有1个表是我的用户表,有1个表是我的角色表,还有1个表是我在角色和用户之间的桥梁表。之所以这样做,是因为我的用户可以为自己分配多个角色。
现在我的问题是如何赋予用户角色以及如何将用户保存到我之前提到的所有表中。请记住,我从头开始,所以我有一个create view。
问候和感谢你的所有帮助!
假设你有这些表:
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
或syncWithoutDetaching
方法来添加或同步用户角色。或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数组中未提供的关系以进行同步-如果你不了解此行为,将会导致意外的行为。
早上好,我已经解决了可能的解决方案,但是现在提交新创建的用户时出现错误“ user_id不能为空”。我该怎么办?@Alserda
使用
$user->roles()->attach()
(或sync
或时syncWithoutDetaching
,user_id
role_user列上的on是通过关系设置的。因此,也许您在roles
User模型上的函数定义中缺少一部分吗?您能否提供更多上下文,例如您在重新创建用户?