Laravel为新创建的用户添加了一个角色



我正在从我已经制作的CRUD中创建一个新用户,但是,我不知道如何为我们正在创建的用户分配角色。我正在与Laravel和3张桌子合作。我有一个表,它是我的用户表,一个表是我的角色表,还有一个表作为我在角色和用户之间的桥梁表。我之所以这样做,是因为我的用户可以为自己分配多个角色。

我现在的问题是如何给用户一个角色,以及如何将用户保存到我之前提到的所有表中。请记住,我是从一个粗糙的工作,所以我有一个创造的观点。

问候和感谢所有的帮助!

假设您有这些表:

  • users
  • roles
  • role_user

其中role_user具有role_iduser_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关系,您将使用syncsyncWithoutDetaching方法来添加或同步用户角色。或者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中没有提供的关系以进行同步,如果您没有意识到这种行为,这将导致意外行为。

我用上面写的解决方案修复了它。

最新更新