【问题标题】:Laravel Fatal Error Class Not Found when migrating迁移时未找到 Laravel 致命错误类
【发布时间】:2014-08-16 07:50:46
【问题描述】:
  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 后第一次运行它,如果这可能相关的话。还有什么我应该寻找的吗?

【问题讨论】:

  • 您是否尝试过彻底清除数据库,而不仅仅是迁移文件夹?
  • 您的迁移是否“依赖”于您删除的其他迁移?就像在表格中添加一列一样?
  • @TheShiftExchange 我删除了数据库中的每个表。我所有的迁移都是“独立的”,它们不需要任何其他迁移。另外,如果可能涉及的话,我最近更新到 4.2...
  • 我曾经遇到过这个问题 - 我不记得我是如何解决它的。如果我是你——我会删除你所有的迁移——然后一次添加一个,直到错误返回。
  • 什么是类Foo?你认识这个班吗?是你写的东西还是你安装的包?这可能与您的 app/config/app.php 文件中的 providers 数组中的项目有关 - 检查其中是否存在不应该存在的内容。

标签: php laravel-4 database-migration


【解决方案1】:

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

例如:在文件“2014_12_08_100923_create_items_tables.php”中,必须是名称为“CreateItemsTables”且使用驼峰式单词的类。

【讨论】:

  • 随处可见转储自动加载解决方案,但没有人解释这一点。谢谢!!
  • 您还必须遵循日期格式前缀stackoverflow.com/questions/24413929/…
  • 这实际上是解决问题的答案(+@xatzisnr 的评论)。接受的答案只是一种解决方法(=重新开始/重做一切)。您还可能需要composer dump-autoload,尤其是如果您重命名迁移PHP文件(手动)。
【解决方案2】:

我解决了我的问题

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

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

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

【讨论】:

  • 看起来您现在应该使用 composer dump-autoload 而不是 artisan。 (Laravel 5)
  • 记住这些文件名!他们必须匹配。请参阅 Juljan 的回答。
  • 就像一个魅力,虽然这应该由 Taylor Otwell 和他的团队解决,但我找到了问题的根源和解决方案。这应该在下一个补丁中解决:stackoverflow.com/a/31201694/6568457
【解决方案3】:

我也遇到了这个问题,解决方案与上述所有不同。它失败的原因是数据库的迁移表中仍然提到了文件名。因为没有唯一的列,所以我无法使用 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',它应该像一个魅力一样工作 :-)

【讨论】:

  • 这也是我的解决方案。问题是我删除了一个迁移文件,但迁移表中还有一行,migrate:refresh 试图回滚文件。
  • 这对我有用。非常感谢。 :)
【解决方案4】:

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

composer dump-autoload

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

class CreateSomeTable extends Migration{}

【讨论】:

    【解决方案5】:

    有一个更简单的方法。

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

    【讨论】:

      【解决方案6】:

      我知道这有点过时了,但实际上有更好的方法。在终端中运行以下命令,然后随意删除它们中的任何一个:

      ~$ 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
      

      【讨论】:

        【解决方案7】:

        对我来说,解决方案是我在迁移中的类名不知何故以小写字母开头。当我将类名更改为全部大写,然后运行composer dump-autoload 时,它最终对我有用。这是使用 Laravel 5.1,物有所值。

        【讨论】:

          【解决方案8】:

          我确实喜欢这样: 1.从数据库迁移表中删除的行不存在迁移 2. 运行命令 php artisan migrate:refresh

          这有助于解决我的问题。

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

          【讨论】:

            【解决方案9】:

            版本 5.1.3 相同的问题修复它:

            • 删除数据库所有表
            • php artisan 迁移:状态

            输出:No migrations found. 好用吧

            • php artisan 迁移:安装
            • php 工匠迁移

            输出是:

            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
            

            这个问题解决了

            【讨论】:

              【解决方案10】:

              我遇到了同样的问题。当我点击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 中输入: 创建表`图像`( ...> `id` 整数 ...> );
              5. 然后php artisan migrate:reset
              6. 现在我又开心了

              【讨论】:

                【解决方案11】:

                如果 artisan 根本不工作并且无论你给出什么命令都不断地向你抛出此消息,请从 bootstrap/cache 文件夹中删除 config.php 文件。

                之后再次运行

                php artisan config:cache
                

                【讨论】:

                  猜你喜欢
                  • 2015-02-04
                  • 2014-12-27
                  • 2021-02-19
                  • 2015-08-29
                  • 1970-01-01
                  • 2017-08-14
                  • 2014-03-10
                  • 2016-02-07
                  • 2018-03-09
                  相关资源
                  最近更新 更多