73

我可以轻松地运行 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}}

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

4

9 回答 9

177

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

于 2013-06-27T11:48:51.883 回答
37

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

如果您遇到此问题,第一个停靠点就是运行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解决了我的问题。

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

于 2013-09-13T03:08:45.413 回答
13

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

composer dump-autoload

希望能帮助到你!

于 2015-06-18T10:00:38.983 回答
8

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

COMPOSER=composer.json composer dump-autoload

在此处输入图像描述

于 2014-12-13T13:07:36.830 回答
8

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

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

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

希望这可以帮助。

于 2013-06-18T21:00:06.890 回答
4

我通过运行修复它

composer.phar update

于 2014-05-02T00:58:50.563 回答
2

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

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

于 2014-06-30T16:28:14.223 回答
1

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

我创建了一个迁移,用于在 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 后,类名无一例外地正确解析

于 2014-09-03T18:18:07.493 回答
0

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

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

我正在运行 Laravel 5。

于 2015-10-31T18:46:06.257 回答