迁移时找不到Laravel致命错误类

Wis*_*tar 19 php database-migration laravel-4

  1. 我已经运行artisan migrate:reset.
  2. 我删除了一些迁移文件,因为我不再需要这些表了.
  3. composer dump-autoload跟着跑了artisan dump-autoload
  4. 我跑了artisan migrate,我一直收到这个错误:

    PHP致命错误:在第297行的/vagrant/LaravelBackend/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php中找不到类'Foo'

我试过了:

  • 再次运行composer dump-autoloadartisan dump-autoload(也使用artisan clear-compiled)
  • 删除迁移表并运行 artisan migrate:install
  • 删除vendor和composer.lock文件并运行 composer install
  • 使用PHPStorm在我的项目中搜索Foo类.没找到任何东西.

    我一直得到同样的错误.这是我第一次运行这个,因为我更新到4.2,如果这可能是相关的.还有什么我应该找的吗?

Jul*_*jan 33

我也有这个问题.必须记住:类名必须符合文件名.简单的文件重命名帮助我:)

例如:在文件"2014_12_08_100923_create_items_tables.php"中必须是使用CamelCase单词的名称为"CreateItemsTables"的类.

  • 您还必须遵循日期格式前缀http://stackoverflow.com/questions/24413929/laravel-fatal-error-class-not-found-when-migrating/35265489#35265489 (3认同)
  • 这实际上就是解决该问题的答案(@xatzisnr的+注释)。可接受的答案只是一种解决方法(=重新开始/重做所有操作)。您还可能需要“ composer dump-autoload”,特别是如果您“重命名”(手动)迁移PHP文件。 (2认同)

Wis*_*tar 25

我解决了我的问题

  1. 删除所有迁移
  2. 运行 composer dump-autoload
  3. 逐个添加它们并运行 php artisan migrate
  4. 删除那些导致Laravel抛出错误的内容
  5. 创建新的迁移以替换已删除的迁移

我不确定为什么会有效,但我的猜测是我可能在过去修改了这些有问题的迁移的类名.

我还发现,使用其初始名称重命名迁移(带有致命错误的那个)也适用于其中一些.

  • 看起来你现在应该使用`composer dump-autoload`而不是'artisan`.(Laravel 5) (4认同)

小智 12

我遇到了这个,并且解决方案与上述所有方案不同.它失败的原因是因为在DB的迁移表中仍然提到了文件名.因为没有唯一的列,我无法使用PHPMyAdmin删除它,并且必须执行CLI路由.

以root用户身份登录服务器.输入以下内容:

mysql -p database_name
Run Code Online (Sandbox Code Playgroud)

(它现在提示输入你的密码.从现在开始,所有内容都以mysql开头>这意味着你在Mysql环境中.

select * from migrations;
Run Code Online (Sandbox Code Playgroud)

查找您删除的迁移文件并复制名称.

delete from migrations where migration = '2015_07_21_000119_create_some_table';
Run Code Online (Sandbox Code Playgroud)

它应该提到一行受影响.现在再次输入第一个命令验证它已消失:

select * from migrations;
Run Code Online (Sandbox Code Playgroud)

如果它通过键入退出Mysql环境

exit;
Run Code Online (Sandbox Code Playgroud)

现在再试一次' php artisan migrate:rollback '它应该像魅力一样工作:-)


xat*_*tnr 6

实际的解决方案是为您的翻译使用正确的命名。你可能还需要做一个

composer dump-autoload

迁移文件必须如下 YYYY_MM_DD_000000_create_some_table.php ,里面的类名必须是

class CreateSomeTable extends Migration{}