我可以轻松地运行工匠迁移等,但是当我尝试回滚时,使用迁移:回滚我一直收到此错误,
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}}
这是一个错误吗?或者我该如何调试呢?
答案 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
答案 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.