重命名迁移后发现类未找到错误,尽管dumpautoload和清除缓存

时间:2015-09-12 23:45:42

标签: laravel migration artisan

我有一个简单的laravel项目,迁移运行良好。我想让其中一个先运行(所以我可以在以后的迁移中使用外键约束中的那个表),所以我通过在“1_”之前添加“1_”来重命名该迁移脚本,因此它首先在列表中。

但是当我在重命名文件后运行迁移时,我从第324行的Migrator.php中获取Class'152152CreatePeopleTable'的致命'class not found'错误 - 请参阅下面的完整堆栈跟踪。 (当我重新命名迁移文件时,在运行迁移时会再次找到该类)。

我更新了vendor / composer / autoload_classmap.php中的名称以匹配更新的文件名(1_2015_09_06_152152_create_people_table.php),并且在phpstorm中搜索,除了laravel.log之外的其他地方找不到'152152_create_people',所以应该有没有其他地方可以有旧的文件名,对吗?

所以我清除了缓存并尝试了类似声音问题的其他建议(谢谢google / stackoverflow):

  • php artisan cache:clear
  • composer clearcache
  • composer dumpautoload
  • 作曲家更新,以防万一
  • 我确保我也有一张新的迁移表;我删除了所有数据库表(包括迁移),然后运行'php artisan migrate:install'(创建新的迁移表)和'php artisan migrate'以确保一切都运行完全新鲜,仍然是同样的错误
  • hail mary:尝试将控制器,模型和迁移添加到composer.json中的autoload类映射中,根据这些帖子(没有帮助,所以我把它取回):"Class not found" error even after dump-autoload?Laravel 4 migrate rollback problems
  • 注意:我最初在安装过程中使用旧的sqlite文件,然后更改为postgres数据库。如果被引用的话,我在database.php中注释掉了那个部分,并从项目中删除了旧的sqlite文件

我还应该检查/尝试什么?

[2015-09-12 22:42:19] local.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Class '152152CreatePeopleTable' not found' in /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:324
Stack trace:
#0 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(133): Symfony\Component\Debug\Exception\FatalErrorException->__construct()
#1 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(118): Illuminate\Foundation\Bootstrap\HandleExceptions->fatalExceptionFromError()
#2 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(0): Illuminate\Foundation\Bootstrap\HandleExceptions->handleShutdown()
#3 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(129): Illuminate\Database\Migrations\Migrator->resolve()
#4 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(112): Illuminate\Database\Migrations\Migrator->runUp()
#5 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(85): Illuminate\Database\Migrations\Migrator->runMigrationList()
#6 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php(74): Illuminate\Database\Migrations\Migrator->run()
#7 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php(502): Illuminate\Database\Console\Migrations\MigrateCommand->fire()
#8 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php(502): call_user_func_array:{/home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php:502}()
#9 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Console/Command.php(150): Illuminate\Container\Container->call()
#10 /home/vagrant/Code/Family-laravel/vendor/symfony/console/Command/Command.php(259): Illuminate\Console\Command->execute()
#11 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Symfony\Component\Console\Command\Command->run()
#12 /home/vagrant/Code/Family-laravel/vendor/symfony/console/Application.php(878): Illuminate\Console\Command->run()
#13 /home/vagrant/Code/Family-laravel/vendor/symfony/console/Application.php(195): Symfony\Component\Console\Application->doRunCommand()
#14 /home/vagrant/Code/Family-laravel/vendor/symfony/console/Application.php(126): Symfony\Component\Console\Application->doRun()
#15 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(100): Symfony\Component\Console\Application->run()
#16 /home/vagrant/Code/Family-laravel/artisan(36): Illuminate\Foundation\Console\Kernel->handle()
#17 /home/vagrant/Code/Family-laravel/artisan(0): {main}()
#18 {main}  

2 个答案:

答案 0 :(得分:4)

实际上,Laravel为所有迁移类添加了日期前缀,这样他就可以保持最新的当前模式状态,当你在类前面添加" 1 _"时,Laravel将无法解析它因此错误

作为解决方案,将文件重命名为项目中最早的日期,例如2014_01_06_152152_create_people_table.php,然后运行php artisan dump-autoload(可能需要删除所有表格)。 ,请记住,这不是合适的解决方案,因为:

  

迁移就像数据库的版本控制一样,允许团队轻松修改和共享应用程序的数据库架构。

确实,继续跟踪架构状态的最佳选择是创建新的迁移artisan make:migration add_person_forein_key_to_{your_table}(可能稍后,您不再需要此外键,因此您只需删除该文件或创建另一个迁移即可删除它)。如果你刚开始你的项目,只需重命名你的迁移,但如果你在一个有很多同事的大型项目中工作,我建议你创建一个新的迁移。

答案 1 :(得分:3)

Laravel 5中不存在

php artisan dump-autoload,您可以使用composer dump-autoload代替