我正在从我已经制作的CRUD中创建一个新用户,但是,我不知道如何为我们正在创建的用户分配角色。我正在与Laravel和3张桌子合作。我有一个表,它是我的用户表,一个表是我的角色表,还有一个表作为我在角色和用户之间的桥梁表。我之所以这样做,是因为我的用户可以为自己分配多个角色。
我现在的问题是如何给用户一个角色,以及如何将用户保存到我之前提到的所有表中。请记住,我是从一个粗糙的工作,所以我有一个创造的观点。
问候和感谢所有的帮助!
假设您有这些表:
users
roles
role_user
其中role_user
具有role_id
和user_id
列。然后你的模型会看起来像:
class User extends Model
{
/**
* Roles relationship.
*
* @return IlluminateDatabaseEloquentRelationsBelongsToMany
*/
public function roles(): BelongsToMany
{
return $this->belongsToMany(Role::class);
}
}
class Role extends Model
{
/**
* Users relationship.
*
* @return IlluminateDatabaseEloquentRelationsBelongsToMany
*/
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中没有提供的关系以进行同步,如果您没有意识到这种行为,这将导致意外行为。
我用上面写的解决方案修复了它。