Class 重命名迁移后未发现错误,尽管 dumpautoload 和清除缓存
Class not found error after renaming migration, despite dumpautoload and clearing cache
我有一个简单的 laravel 项目,其中的迁移 运行 很好。我想首先制作其中一个 运行(这样我可以在以后的迁移中的外键约束中使用那个 table),所以我通过在前面加上“1_”重命名了那个迁移脚本,所以它是第一个名单。
但是当我 运行 迁移 自从重命名文件后,我得到一个致命的 'class not found' 错误 for Class '152152CreatePeopleTable',来自Migrator.php 第 324 行 - 请参阅下面的完整堆栈跟踪。 (当我重命名迁移文件时,运行 迁移时再次找到 class)。
我更新了 vendor/composer/autoload_classmap.php 中的名称以匹配更新后的文件名 (1_2015_09_06_152152_create_people_table.php),并在 phpstorm 中搜索,'152152_create_people' 除了 laravel.log 之外在其他任何地方都找不到,所以应该没有其他地方可以使用旧文件名,对吧?
所以我清除了缓存并尝试了 similar-sounding 个问题的其他建议(谢谢 google/Whosebug):
- php artisan cache:clear
- 作曲家清除缓存
- 作曲家转储自动加载
- 作曲家更新,以防万一
- 我确保我也有一个新的迁移 table;我删除了我所有的数据库tables(包括迁移),然后是运行'php artisan migrate:install'(创建一个新的迁移table)和'php artisan migrate'以确保一切运行完全新鲜,还是一样的错误
- 万岁玛丽:尝试将控制器、模型和迁移添加到 composer.json 中的自动加载 classmap 中,按照这些帖子(没有帮助,所以我把它撤回了):"Class not found" error even after dump-autoload? and Laravel 4 migrate rollback problems
- 注意:我最初在设置期间使用旧的 sqlite 文件开始,然后更改为 postgres 数据库。万一它被引用了,我在 database.php 中注释掉了那个部分,并且我从项目
中删除了旧的 sqlite 文件
我还应该是什么checking/trying?
[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}
实际上 Laravel 为所有迁移 classes 加上日期前缀,这样他就可以在当前架构状态上保持最新状态,当您在 class 前面加上“1_”时,Laravel 将无法解析它,因此会出现错误。
作为解决方案,将文件重命名为项目中最早的日期,例如 2014_01_06_152152_create_people_table.php
然后 运行 php artisan dump-autoload
(也许您需要删除所有表)。 但是,请记住这不是合适的解决方案,因为:
Migrations are like version control for your database, allowing a team to easily modify and share the application's database schema.
事实上,保持跟踪架构状态的最佳选择是创建一个新的迁移 artisan make:migration add_person_forein_key_to_{your_table}
(也许稍后,您不再需要这个外键,因此您只需删除该文件或创建另一个迁移到算了吧)。如果您刚刚开始您的项目,只需重命名您的迁移就可以了,但如果您在一个大型项目中与许多同事一起工作,我建议您创建一个新的迁移。
php artisan dump-autoload
在Laravel 5中不存在,可以用composer dump-autoload
代替
我有一个简单的 laravel 项目,其中的迁移 运行 很好。我想首先制作其中一个 运行(这样我可以在以后的迁移中的外键约束中使用那个 table),所以我通过在前面加上“1_”重命名了那个迁移脚本,所以它是第一个名单。
但是当我 运行 迁移 自从重命名文件后,我得到一个致命的 'class not found' 错误 for Class '152152CreatePeopleTable',来自Migrator.php 第 324 行 - 请参阅下面的完整堆栈跟踪。 (当我重命名迁移文件时,运行 迁移时再次找到 class)。
我更新了 vendor/composer/autoload_classmap.php 中的名称以匹配更新后的文件名 (1_2015_09_06_152152_create_people_table.php),并在 phpstorm 中搜索,'152152_create_people' 除了 laravel.log 之外在其他任何地方都找不到,所以应该没有其他地方可以使用旧文件名,对吧?
所以我清除了缓存并尝试了 similar-sounding 个问题的其他建议(谢谢 google/Whosebug):
- php artisan cache:clear
- 作曲家清除缓存
- 作曲家转储自动加载
- 作曲家更新,以防万一
- 我确保我也有一个新的迁移 table;我删除了我所有的数据库tables(包括迁移),然后是运行'php artisan migrate:install'(创建一个新的迁移table)和'php artisan migrate'以确保一切运行完全新鲜,还是一样的错误
- 万岁玛丽:尝试将控制器、模型和迁移添加到 composer.json 中的自动加载 classmap 中,按照这些帖子(没有帮助,所以我把它撤回了):"Class not found" error even after dump-autoload? and Laravel 4 migrate rollback problems
- 注意:我最初在设置期间使用旧的 sqlite 文件开始,然后更改为 postgres 数据库。万一它被引用了,我在 database.php 中注释掉了那个部分,并且我从项目 中删除了旧的 sqlite 文件
我还应该是什么checking/trying?
[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}
实际上 Laravel 为所有迁移 classes 加上日期前缀,这样他就可以在当前架构状态上保持最新状态,当您在 class 前面加上“1_”时,Laravel 将无法解析它,因此会出现错误。
作为解决方案,将文件重命名为项目中最早的日期,例如 2014_01_06_152152_create_people_table.php
然后 运行 php artisan dump-autoload
(也许您需要删除所有表)。 但是,请记住这不是合适的解决方案,因为:
Migrations are like version control for your database, allowing a team to easily modify and share the application's database schema.
事实上,保持跟踪架构状态的最佳选择是创建一个新的迁移 artisan make:migration add_person_forein_key_to_{your_table}
(也许稍后,您不再需要这个外键,因此您只需删除该文件或创建另一个迁移到算了吧)。如果您刚刚开始您的项目,只需重命名您的迁移就可以了,但如果您在一个大型项目中与许多同事一起工作,我建议您创建一个新的迁移。
php artisan dump-autoload
在Laravel 5中不存在,可以用composer dump-autoload
代替