【问题标题】:Laravel 4 migrate rollback problemsLaravel 4 迁移回滚问题
【发布时间】:2013-06-14 23:56:09
【问题描述】:

我可以轻松地运行 artisan migrate 等,但是当我尝试回滚它时,使用 migration:rollback 我不断收到此错误,

c:\xampp\htdocs\laravel>php artisan migrate:rollback
{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Class 'CreateCodesnippetsTable' not found","file":"C:\\xampp\\htdocs\\laravel\\vendor\\laravel\\framework\\src\\Illum
inate\\Database\\Migrations\\Migrator.php","line":301}}

这是一个错误吗?或者我应该如何调试这个?

【问题讨论】:

  • 请提供迁移文件,用于您尝试回滚的迁移
  • pastebin.com/z5c7nvZd(已列出)
  • 您的 CodeSnippetsMigration 文件是如何命名的?您是否碰巧手动更改了此名称或类名?
  • 我也遇到了同样的问题。但就我而言,它在 migrate:reset/migrate:refresh 上失败了。问题是,我删除了一个迁移文件,但表迁移仍然包含该文件的条目,因此由于找不到类错误,工匠无法回滚此迁移。我从迁移表中删除了这个条目,它工作得很好。

标签: php laravel


【解决方案1】:

我只是删除了迁移表然后运行php artisan migrate:refresh

然后迁移都能够执行,不确定这是否是最好的方法,但它对我有用。

我正在运行 Laravel 5。

【讨论】:

    【解决方案2】:

    从 laravel 站点下载 composer.phar 文件,并将 composer.phar 文件带到 laravel 文件夹的根目录, p>

    然后从终端来到 laravel 的根目录并运行 composer.phar update 或直接运行 php artisan dump-autoload

    【讨论】:

      【解决方案3】:

      刚刚为这个问题苦苦挣扎了几天,我想我现在可以提供明确的答案来解决这个问题。是的,我知道大电话,但请耐心等待。

      如果您遇到此问题,第一个呼叫端口是运行composer dump-autoload。这应该会导致文件 vendor/composer/autoload_classmap.php 的更新版本。

      如果autoload_classmap.php 没有更新,则可能是权限问题,在这种情况下,您可以尝试sudo composer dump-autoload

      但是,如果autoload_classmap.php 确实得到更新,请检查它是否包含您的迁移类的条目(在本例中为CreateCodesnippetsTable)。如果这个类没有条目,那么您应该检查您的composer.json 文件并确保app/database/migrations 文件夹包含在自动加载部分中,例如:

      "autoload": {
          "classmap": [
              "app/controllers",
              "app/models",
              "app/database/migrations"
          ]
      },
      

      最后一点让我搞砸了。在一次错误的优化尝试中,我尽可能多地从我的composer.json 文件中提取出来,天真地认为这只会影响 Web 请求。事实证明,这也影响了 Artisan,因此将这条线路放回原处并运行 composer dump-autoload 为我解决了问题。

      最后,如果一切都失败了,那么可能在导致问题的支持库之一中存在错误,在这种情况下,您可以尝试使用composer update 或其一些变体进行更新。但是,我怀疑这很少是问题的真正原因。

      【讨论】:

      • 缺少自动加载更改也可能意味着 composer.json 上的语法错误。您会知道,在您的主项目上运行composer dump-autoload 时,但在运行php artisan dump-autoload 时,您的工作台中composer.json 上的语法错误不会被警告。如果您的工作台项目正在运行,请cd 进入它们并尝试单独运行composer dump-autoload
      【解决方案4】:

      如果您在 Windows 中,只需在终端/命令行实用程序中使用 composer 并执行以下操作:

      composer dump-autoload
      

      希望对你有帮助!

      【讨论】:

        【解决方案5】:

        在我看来,这个错误没有单一的解决方案。我尝试了很多建议,但最后这个建议对我有用。

        COMPOSER=composer.json composer dump-autoload
        

        【讨论】:

          【解决方案6】:

          我遇到了同样的问题并找出问题

          我创建了一个迁移,用于在 PatientReasonOfVisits 表中添加新列日期 我使用了 laravel 生成器 当我创建迁移时,类名是

          class AddDateToPatientReasonOfVisitsTable
          

          确定创建新的迁移文件后,您需要运行 composer dump-autoload 以确保该文件列在类映射文件中

          文件名是 2014_09_02_214134_add_date_to_patientreasonofvisitstable.php

          迁移成功 并且在迁移表中添加了一条新记录。 在迁移列中使用文件名

          当我回滚迁移时 我得到了找不到类的异常找不到什么类 这个

          AddDateToPatientreasonofvisitsTable
          

          注意:类名之间的区别

          我为什么以及如何解决这个问题 我想当你回滚使用迁移表中的迁移文件名解析的类名时 大小写由文件名中的下划线“_”决定

          所以在将迁移文件重命名为 2014_09_02_214134_add_date_to_patient_reason_of_visits_table.php 并确保在重命名文件后运行 composer dump-autoload 类名正确解析,无一例外

          【讨论】:

            【解决方案7】:

            我通过运行修复了它

            composer.phar update

            【讨论】:

            • 不需要更新依赖,因为只需要转储自动加载的文件并在更新时重新生成它们,这个任务最后也完成了,但不需要完全更新依赖,如果不需要的话。只需运行命令“composer dumpautoload”或“composer.phar dumpautoload”,然后重试。
            【解决方案8】:

            也许您已经解决了这个问题。但我注意到,出于某种原因,回滚通常需要您先运行composer dumpautoload。即使您的迁移成功。

            【讨论】:

            • 你这个天才。让我迷惑了一个小时。
            • 为什么我们需要运行 composer dumpautoload ?
            • 我们需要 composer dump-autoload 因为迁移只是一堆类,它们在向上/向下运行过程中自动加载。然而 php artisan dump-autoload 没有显示 composer.json 错误,而 composer dump-autoload 有。
            • 就我而言,我还没有在这台机器上安装作曲家。 (重新安装 linux 时复制了整个目录。)因此,当 migrate:make 运行 dump-autoload 时,它没有在我的本地机器上执行,因为我没有 composer。安装作曲家并运行转储自动加载工作。
            【解决方案9】:

            据我所知,我猜你已经手动更改了类名。 在错误中,您有类名CreateCodesnippetsTable,但在您提供的迁移文件(pastebin)中,类名是CreateCodeSnippetsTable(注意Snippets 中的S,我猜这是您手动更改的)。

            如果您检查数据库中的迁移表,您将看到每次迁移的记录。当您创建迁移时,它将以该名称保存在数据库中,并且回滚方法尝试使用数据库中提供的名称读取文件,以防您手动更改它时 laravel 找不到类并且您得到错误。

            要解决此问题,您可以撤消更改并尝试回滚或手动编辑数据库中的迁移行以包含正确的类名。

            希望这会有所帮助。

            【讨论】:

              猜你喜欢
              • 2021-07-01
              • 2015-01-13
              • 2013-05-31
              • 2017-03-08
              • 1970-01-01
              • 2018-08-01
              • 2017-07-14
              • 2017-01-22
              • 2013-07-15
              相关资源
              最近更新 更多