refresh 数据时一直出错?

在“ php artisan migrate:refresh --seed ” 这一步出错:

In PermissionAlreadyExists.php line 11:                                                                
  A `manage_contents` permission already exists for guard `web`.                                                          

清了缓存,仍然出错。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

@Arif
谢谢,是缓存的原因,请问 composer dumpautoload 的作用是什么?

5年前 评论
讨论数量: 21
庞浩然Paul

看报错应该是有一个地方权限给重复了,我认为这是由于连续输入代码的时候照着敲导致的。比如 manage_contentmanage_users

我猜测是 databasemigrationsXXXXX_seed_roles_and_permissions_data.php 这里24行左右 name 输入重复。
php artisan migrate:refresh --seed 是命令组合,出错建议分开输入(也可以把截图给大一点,上面还有报错看不到)。migrate:refreshphp artisan db:seed

我不了解 Permission 是何时给 guard 中的 web 的。

6年前 评论

@庞浩然Paul
谢谢你的回复。
我先把代码贴出来。

file

然后是报错信息

file

我尝试查找数据库,发现数据已经是清空了的。
同时我用php artisan cache:forget spatie.permission.cache
清除了缓存,但仍然出这个错误,当注释Permission::create(['name' => 'manage_contents']);
后,就依次出现 manage_users 权限已经存在。

说明两点:

  1. 当做到[7.1 多用户角色权限]时的php artisan migrate:refresh --seed时,程序是正常的;而当做到[本节]的php artisan migrate:refresh --seed时,程序出现了上面的错误;
  2. 我用php artisan permission:create-permission命令直接创建其他权限没有问题,而创建项目中的这三个权限,也是出现上面的错误;
    难道 Administrator 的“配置信息”对这个有影响?
6年前 评论
庞浩然Paul

嗯,看图我想 权限 应该是还存在数据库的,我理解为回滚操作的时候指令不对没有清除干净,去确认一下吧,还有 down(),操作是按预期清除权限了吗?就是第一张图下面的代码。

6年前 评论

你在migration文件里添加数据?

6年前 评论

@庞浩然Paul
看看down的代码,还有数据库的

file

file

我曾经完全删除数据库,重新执行migrate,都不能解决。

6年前 评论

@FMW
是的,这是添加正式的初始化数据

6年前 评论

@jesseliu 建议在Seeder里面做这些事情

6年前 评论
庞浩然Paul

看一下 config/permission.php 里面的 models 下的 table_namespermissions 是否对应的 permissions
php artisan tinker 输入 use Spatie\Permission\Models\Permission;Permission::getPermissions(); 看一下都有什么权限。
这个要不行我,难道是 composer 扩展包没更新比如 composer.json 或者不匹配?要不是 PHP 版本?

6年前 评论
庞浩然Paul

@jesseliu 正常这个 tinker 里的数据应该是按照 composer 包的 配置下的 table_names 去数据库里查对应的 permission 表。比如我做的测试,输入 artisan 创建权限 123 ,我的对应表里就会出现,并且再次创建 123 就会出现权限重复的错误。

6年前 评论

@庞浩然Paul
tinker可以查询到数据,但db里没数据,这是什么原因?

6年前 评论
庞浩然Paul

1、一个想法:输入下 php artisan migrate:refresh --seed 看一下 laravel.log 日志文件
2、两个想法:mysql日志
3、走一遍底层,跟着走一遍。我用 tinker 走过,就是很慢。
4、缓存清理是怎么做的呢,为什么 tinker 还会有呢。
5、用 git 回到你能接受的地方,重来一遍。
我能想到的也就这些了。逃

6年前 评论

把缓存全部清掉就好了,已亲测

5年前 评论

composer dumpautoload 后试一试

5年前 评论

@Arif
谢谢,是缓存的原因,请问 composer dumpautoload 的作用是什么?

5年前 评论

@jesseliu 生成composer自动加载的文件

5年前 评论

@jesseliu
分享:深入 Composer autoload
问:为什么总是要 composer dump-autoload ?
答:因为 database 文件夹使用 classmap 来做加载的。所以只有在打了 composer dumpautoload 之后 composer 才会更新 autoload_classmap 的内容。

5年前 评论

此贴终结:用root权限清除缓存即可。
sudo php artisan cache:clear

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!