我有一个简单的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):
我还应该检查/尝试什么?
[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}
答案 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)
php artisan dump-autoload
,您可以使用composer dump-autoload
代替