【问题标题】:Laravel adding a role to a newly created userLaravel 为新创建的用户添加角色
【发布时间】:2021-03-13 12:57:13
【问题描述】:

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

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

问候并感谢所有帮助!

【问题讨论】:

  • 看一看attach 方法的雄辩关系

标签: php laravel crud roles user-management


【解决方案1】:

假设您有这些表:

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

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

【讨论】:

  • 早上好,我想出了你可能的解决方案,但是我现在在提交新创建的用户时收到错误“user_id cannot be null”。我能做些什么呢? @Alserda
  • 当使用$user->roles()->attach()(或sync或syncWithoutDetaching时,role_user列上的user_id是通过关系设置的。所以也许你在你的定义中遗漏了一部分roles 您的用户模型上的函数?您能否提供更多上下文,例如您正在创建用户的部分?
【解决方案2】:

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

【讨论】:

  • 如果我的回答解决了您的问题,那么您可以将我的反应标记为“答案”。欢迎使用 StackOverflow!
猜你喜欢
  • 2016-12-08
  • 2010-09-24
  • 2013-09-29
  • 2013-11-11
  • 2019-09-19
  • 1970-01-01
  • 2022-01-18
  • 2019-08-11
  • 1970-01-01
相关资源
最近更新 更多