Warm tip: This article is reproduced from serverfault.com, please click

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

(php - Laravel adding a role to a newly created user)

发布于 2020-12-01 15:20:29

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

现在我的问题是如何赋予用户角色以及如何将用户保存到我之前提到的所有表中。请记住,我从头开始,所以我有一个create view。

问候和感谢你的所有帮助!

Questioner
Boudewijn
Viewed
11
Alserda 2020-12-01 23:48:54

假设你有这些表:

  • users
  • roles
  • role_user

哪里role_userrole_iduser_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);

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