Laravel4迁移回滚问题

我可以很容易地运行的手工迁移等,但当我尝试回滚它,与迁移: 回滚我不断得到这个错误,

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

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

19219 次浏览

在我看来,我猜你已经手动更改了类名。 在错误中,类名称为 CreateCodesnippetsTable,但是在提供的迁移文件(pastebin)中,类名称为 CreateCodeSnippetsTable(注意 Snipppet 中的 S,我猜这就是您手动更改的内容)。

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

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

希望这个能帮上忙。

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

刚刚与这个问题斗争了几天,我想我现在可以提供 很明确解决这个问题的答案。是的,我知道这很重要,但是忍耐一下。

如果遇到此问题,第一个调用端口是运行 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文件中提取东西,天真地认为这只会影响网络请求。结果这也影响了 Artisan,所以把这条线放回去并运行 composer dump-autoload为我解决了这个问题。

最后,如果所有这些都失败了,那么 也许吧在其中一个支持库中存在一个 bug,导致了这个问题,在这种情况下,您可以尝试使用 composer update或其中的一些变体进行更新。然而,我怀疑这很少会是问题的真正原因。

我用跑的方式解决了

composer.phar update

从 Laravel 站点下载 作曲家文件并将 作曲家文件带到 laravel 文件夹的 根目录,

然后从终端来到 Laravel 的根目录下运行 composer.phar update或者干脆运行 php artisan dump-autoload

我遇到了同样的问题,并且解决了这个问题

我已经创建了一个迁移,用于在 PatientRequonOfVisits 表中添加新的列日期 我用了幼虫发生器 当我创建迁移时,类名为

class AddDateToPatientReasonOfVisitsTable

当然,在创建一个新的迁移文件之后,您需要运行作曲家 dump-autoload 来确保文件被列在类映射文件中

文件名是 2014 _ 09 _ 02 _ 214134 _ add _ date _ to _ patientreason ofvisitStability. php

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

当我回滚迁移时 我得到的类没有发现例外什么类没有发现 这个

AddDateToPatientreasonofvisitsTable

注意: 类名之间的区别

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

因此,在将迁移文件重命名为 2014 _ 09 _ 02 _ 214134 _ add _ date _ to _ person _ reason _ of _ views _ table. php 2014 _ 09 _ 02 _ 214134 _ add _ date _ to _ person _ reason _ of _ views _ table. php 2014 _ 09 _ 02 _ 214134 _ add _ date _ to _ 并确保在重命名文件后运行作曲家 dump-autoload 正确解析的类名没有例外

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

COMPOSER=composer.json composer dump-autoload

enter image description here

如果在 windows 中,只需在终端/命令行实用程序中使用 作曲家,然后执行以下操作:

composer dump-autoload

希望能有帮助!

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

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

我负责 Laravel 5。