Laravel 4迁移回滚问题

时间:2013-06-18 16:43:27

标签: php laravel

我可以轻松地运行工匠迁移等,但是当我尝试回滚时,使用迁移:回滚我一直收到此错误,

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}}

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

9 个答案:

答案 0 :(得分:177)

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

答案 1 :(得分: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为我解决了问题。

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

答案 2 :(得分:13)

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

composer dump-autoload

希望它有所帮助!

答案 3 :(得分:8)

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

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

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

希望这有帮助。

答案 4 :(得分:8)

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

COMPOSER=composer.json composer dump-autoload

enter image description here

答案 5 :(得分:4)

我通过运行

修复了它

composer.phar update

答案 6 :(得分:2)

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

然后从终端进入laravel的根目录并运行composer.phar update或只运行php artisan dump-autoload

答案 7 :(得分: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 类名正确解析,无异常

答案 8 :(得分:0)

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

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

我正在运行Laravel 5.