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

时间:2014-06-25 16:23:02

标签: php laravel-4 database-migration

  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'

  5. 我试图:

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

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

11 个答案:

答案 0 :(得分:32)

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

例如:在文件“2014_12_08_100923_create_items_tables.php”中必须是名为“CreateItemsTables”的类,并使用CamelCase单词。

答案 1 :(得分:25)

我通过

解决了我的问题
  1. 删除所有迁移
  2. 正在运行composer dump-autoload
  3. 逐个添加它们并运行php artisan migrate
  4. 删除导致Laravel抛出错误的内容
  5. 创建新的迁移以替换已删除的迁移
  6. 我不确定为什么会有效,但我的猜测是我可能在过去修改了这些有问题的迁移的类名。

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

答案 2 :(得分:12)

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

以root身份登录您的服务器。 输入以下内容:

mysql -p database_name

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

select * from migrations;

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

delete from migrations where migration = '2015_07_21_000119_create_some_table';

应该提到有关1行影响的内容。现在再次输入第一个命令验证它已消失:

select * from migrations;

如果它通过输入

退出了Mysql环境
exit;

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

答案 3 :(得分:4)

有一种更简单的方法。

  1. 手动重新创建这些删除迁移。 artisan make:migration
  2. 运行artisan migrate:reset以回滚
  3. 删除刚刚创建的虚拟迁移文件。
  4. 运行artisan migrate:refresh

答案 4 :(得分:3)

我知道这有点过去但实际上还有更好的方法。在终端中运行以下命令并随意删除其中任何一个:

~$ php artisan clear-compiled;php artisan cache:clear;php artisan config:clear;php artisan debugbar:clear;php artisan view:clear;php artisan optimize

要执行常规任务,请创建名为artisan-clear的可执行文件:

#!/bin/bash

php artisan clear-compiled
php artisan cache:clear
php artisan config:clear
php artisan debugbar:clear
php artisan view:clear
php artisan optimize

答案 5 :(得分:2)

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

composer dump-autoload

迁移文件必须如下所示 YYYY_MM_DD_000000_create_some_table.php 并且里面的类名必须是

class CreateSomeTable extends Migration{}

答案 6 :(得分:1)

对我来说,解决方案是迁移中的我的类名以小写字母开头。当我将类名更改为大写时,然后运行composer dump-autoload,它最终为我工作。这是使用Laravel 5.1,它的价值。

答案 7 :(得分:1)

我是这样的: 1.从数据库中删除了来自迁移表的行不存在的迁移 2.运行命令php artisan migrate:refresh

这有助于解决我的问题。

*所有数据都将从数据库表中删除

答案 8 :(得分:1)

版本5.1.3同样的问题解决了我:

  • drop database all tables
  • php artisan migrate:status

输出:No migrations found. 好吧用吧

  • php artisan migrate:install
  • php artisan migrate

输出是:

Migrated: 2016_11_24_093015_dt_some_table
Migrated: 2016_12_05_141004_dt_some_table
Migrated: 2016_12_07_110518_dt_some_table
Migrated: 2016_12_08_141807_dt_some_table
Migrated: 2016_12_13_090832_dt_some_table

这个问题解决了

答案 9 :(得分:0)

我遇到了同样的问题。当我点击php artisan migrate:reset时,我得到了Class 'CreateImagesTable' not found。并composer dump-autoload没有帮助。

我的解决方案非常简单:

  1. php artisan make:migration create_images_table --create=images
  2. composer dump-autoload
  3. 然后我得到了: SQLSTATE[HY000]: General error: 1 no such table: images (SQL: drop table "images")
  4. 所以在sqlite中输入: CREATE TABLE`image`( ...> `id`INTEGER ...> );
  5. 然后php artisan migrate:reset
  6. 现在我又开心了

答案 10 :(得分:0)

如果工匠根本不工作并且不管您给出的命令如何都不断向您发送此消息,请从config.php文件夹中删除bootstrap/cache文件。

再次运行之后

php artisan config:cache
相关问题