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

Laravel adding a role to a newly created user

我正在从我已经创建的 CRUD 创建一个新用户,但是,我不知道如何为我们正在创建的用户分配一个角色。我正在与 Laravel 和 3 table 一起工作。我有 1 个 table 是我的用户 table,1 个 table 是我的角色 table,1 个 table 是我的桥梁 table角色和用户之间。我这样做是因为我的用户可以为自己分配 1 个以上的角色。

我现在的问题是如何给用户一个角色以及如何将用户保存到我之前提到的所有 tables。请记住我是在 crud 上工作,所以我有一个创建视图。

问候并感谢您的帮助!

假设您有这些表:

  • 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 关系,您可以使用 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);

我建议查看管理关系的文档 (link)。因为 sync 例如删除了给定模型或 ID 数组中未提供的关系以进行同步 - 如果您不知道此行为,这将导致意外行为。

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