首页 > 解决方案 > Laravel 为新创建的用户添加角色

问题描述

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

我现在的问题是如何给用户一个角色以及如何将用户保存到我之前提到的所有表中。请记住,我是从一个杂物开始工作的,所以我有一个创建视图。

问候并感谢所有帮助!

标签: phplaravelcrudrolesuser-management

解决方案


假设您有这些表:

  • 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关系,您可以使用syncorsyncWithoutDetaching方法来添加或同步用户角色。或者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 数组中未提供的关系以进行同步 - 如果您不知道这种行为,这将导致意外行为。


推荐阅读