Spatie 角色插件,用于 Laravel + 具有角色的种子用户,不分配角色
P粉637866931
P粉637866931 2023-09-05 23:24:56
[PHP讨论组]

在 Laravel 9 我尝试为用户添加角色

Spatie 刚刚处理了所有事情,没有错误,但在数据库中,角色和用户之间的关系没有出现在表“model_has_role”的模型中

我创建了类似的角色

$roleName = 'MyRole';
$guardName = 'myGuard';

$roleObj = Role::create(['guard_name' => $guardName, 'name' => $roleName]);

然后创建用户,例如

$user = new User($userDatas);

我从模型中收集了应填写的所有数据

$arrayWithUsersData = [];

foreach($users as $user)
{
   if($users !== NULL)
   {
      $arrayWithUsersData[] = $user->getAttributes();
   }
}

在此之后,我尝试将所有用户一次插入数据库,所以我使用了

DB::table('users')->insert($arrayWithUsersData);

最后我在 foreach $users 中尝试了任何可能的方式来分配角色 像:

$user->assignRole($roleName);
$user->assignRole($roleName, $guardName);
$user->assignRole([$roleName, $guardName]);
$user->assignRole($myRole);
$user->assignRole($myRole, $guardName);
$user->assignRole([$myRole, $guardName]);
$user->syncRoles($myRole);
$user->syncRoles($myRole, $guardName);
$user->syncRoles([$myRole, $guardName]);

但是没有给出任何错误,但仍然没有创建关系

P粉637866931
P粉637866931

全部回复(1)
P粉216807924

问题是,如果模型存在,则 allocateRole 和syncRole 中的 spatie 有效

我的意思是 Laravel 模型具有“存在”属性

vendor\spatie\laravel-permission\src\Traits\HasRoles.php 中有一些来自 allocateRole 函数的代码

  • syncRoles 是 allocateRole 的包装器

    $model = $this->getModel();
    
      if ($model->exists) {
          $this->roles()->sync($roles, false);
          $model->load('roles');
      } else {
          $class = \get_class($model);
    
          $class::saved(
              function ($object) use ($roles, $model) {
                  if ($model->getKey() != $object->getKey()) {
                      return;
                  }
                  $model->roles()->sync($roles, false);
                  $model->load('roles');
              }
          );
      }

因此 DB::table('users')->insert($arrayWithUsersData); 不要更改模型中的参数“exists”,因为它适用于原始数据

所以我必须切换为一一创建用户并保存它们

$user = new User($userData);
$user->save();

现在 Spatie 创建应有的关系。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号