迁移时未找到 Laravel 致命错误类
Posted
技术标签:
【中文标题】迁移时未找到 Laravel 致命错误类【英文标题】:Laravel Fatal Error Class Not Found when migrating 【发布时间】:2014-08-16 07:50:46 【问题描述】:我已经运行artisan migrate:reset
。
我已经删除了一些迁移文件,因为我不再需要这些表了。
我跑了composer dump-autoload
,然后是artisan dump-autoload
我运行了artisan migrate
,但一直收到此错误:
PHP 致命错误:在第 297 行的 /vagrant/LaravelBackend/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php 中找不到“Foo”类
我尝试过:
再次运行composer dump-autoload
和artisan dump-autoload
(也使用artisan clear-compiled
)
移除迁移表并运行artisan migrate:install
删除 vendor 和 composer.lock 文件并运行 composer install
使用 phpStorm 在我的项目中搜索 Foo 类。什么都没找到。
我不断收到同样的错误。这是我更新到 4.2 后第一次运行它,如果这可能相关的话。还有什么我应该寻找的吗?
【问题讨论】:
您是否尝试过彻底清除数据库,而不仅仅是迁移文件夹? 您的迁移是否“依赖”于您删除的其他迁移?就像在表格中添加一列一样? @TheShiftExchange 我删除了数据库中的每个表。我所有的迁移都是“独立的”,它们不需要任何其他迁移。另外,如果可能涉及的话,我最近更新到 4.2... 我曾经遇到过这个问题 - 我不记得我是如何解决它的。如果我是你——我会删除你所有的迁移——然后一次添加一个,直到错误返回。 什么是类Foo
?你认识这个班吗?是你写的东西还是你安装的包?这可能与您的 app/config/app.php
文件中的 providers
数组中的项目有关 - 检查其中是否存在不应该存在的内容。
【参考方案1】:
我也有这个问题。 必须记住:类名必须与文件名一致。 简单的文件重命名帮助了我:)
例如:在文件“2014_12_08_100923_create_items_tables.php”中,必须是名称为“CreateItemsTables”且使用驼峰式单词的类。
【讨论】:
随处可见转储自动加载解决方案,但没有人解释这一点。谢谢!! 您还必须遵循日期格式前缀***.com/questions/24413929/… 这实际上是解决问题的答案(+@xatzisnr 的评论)。接受的答案只是一种解决方法(=重新开始/重做一切)。您还可能需要composer dump-autoload
,尤其是如果您重命名迁移PHP文件(手动)。【参考方案2】:
我解决了我的问题
-
删除所有迁移
正在运行
composer dump-autoload
将它们一一添加并运行php artisan migrate
删除导致 Laravel 抛出错误的那些
创建新的迁移以替换已删除的迁移
我不确定为什么会这样,但我的猜测是我过去可能修改了这些有问题的迁移的类名。
我还发现,使用初始名称(引发致命错误的那个)重命名迁移也适用于其中的一些。
【讨论】:
看起来您现在应该使用composer dump-autoload
而不是 artisan
。 (Laravel 5)
记住这些文件名!他们必须匹配。请参阅 Juljan 的回答。
就像一个魅力,虽然这应该由 Taylor Otwell 和他的团队解决,但我找到了问题的根源和解决方案。这应该在下一个补丁中解决:***.com/a/31201694/6568457【参考方案3】:
我也遇到了这个问题,解决方案与上述所有不同。它失败的原因是数据库的迁移表中仍然提到了文件名。因为没有唯一的列,所以我无法使用 PHPMyAdmin 将其删除,因此必须采用 CLI 路由。
以 root 身份登录到您的服务器。 输入以下内容:
mysql -p database_name
(它现在提示您输入密码。从这里开始,所有内容都以 mysql > 开头,这意味着您在 Mysql 环境中。
select * from migrations;
查找您删除的迁移文件并复制名称。
delete from migrations where migration = '2015_07_21_000119_create_some_table';
应该提到受影响的 1 行。现在再次输入第一个命令来验证它是否已经消失:
select * from migrations;
如果它消失了,键入退出 Mysql 环境
exit;
现在再次尝试 'php artisan migrate:rollback',它应该像一个魅力一样工作 :-)
【讨论】:
这也是我的解决方案。问题是我删除了一个迁移文件,但迁移表中还有一行,migrate:refresh
试图回滚文件。
这对我有用。非常感谢。 :)【参考方案4】:
实际的解决方案是为您的翻译使用正确的命名。你可能还需要做一个
composer dump-autoload
迁移文件必须如下
YYYY_MM_DD_000000_create_some_table.php
并且里面的类名必须是
class CreateSomeTable extends Migration
【讨论】:
【参考方案5】:有一个更简单的方法。
-
手动重新创建那些删除迁移。
artisan make:migration
运行artisan migrate:reset
回滚
删除那些刚刚创建的虚拟迁移文件。
运行artisan migrate:refresh
【讨论】:
【参考方案6】:我知道这有点过时了,但实际上有更好的方法。在终端中运行以下命令,然后随意删除它们中的任何一个:
~$ php artisan clear-compiled;php artisan cache:clear;php artisan config:clear;php artisan debugbar:clear;php artisan view:clear;php artisan optimize
要做一个常规任务,创建一个名为 artisan-clear 的可执行文件:
#!/bin/bash
php artisan clear-compiled
php artisan cache:clear
php artisan config:clear
php artisan debugbar:clear
php artisan view:clear
php artisan optimize
【讨论】:
【参考方案7】:对我来说,解决方案是我在迁移中的类名不知何故以小写字母开头。当我将类名更改为全部大写,然后运行composer dump-autoload
时,它最终对我有用。这是使用 Laravel 5.1,物有所值。
【讨论】:
【参考方案8】:我确实喜欢这样: 1.从数据库迁移表中删除的行不存在迁移 2. 运行命令 php artisan migrate:refresh
这有助于解决我的问题。
*您的所有数据将从数据库表中删除
【讨论】:
【参考方案9】:版本 5.1.3 相同的问题修复它:
删除数据库所有表 php artisan 迁移:状态输出:No migrations found.
好用吧
输出是:
Migrated: 2016_11_24_093015_dt_some_table
Migrated: 2016_12_05_141004_dt_some_table
Migrated: 2016_12_07_110518_dt_some_table
Migrated: 2016_12_08_141807_dt_some_table
Migrated: 2016_12_13_090832_dt_some_table
这个问题解决了
【讨论】:
【参考方案10】:我遇到了同样的问题。当我点击php artisan migrate:reset
时,我得到了Class 'CreateImagesTable' not found
。而composer dump-autoload
没有帮助。
我的解决方案很简单:
php artisan make:migration create_images_table --create=images
composer dump-autoload
然后我得到:
SQLSTATE[HY000]: General error: 1 no such table: images (SQL: drop table "images")
所以我在 sqlite 中输入:
创建表`图像`(
...> `id` 整数
...> );
然后php artisan migrate:reset
现在我又开心了
【讨论】:
【参考方案11】:如果 artisan 根本不工作并且无论你给出什么命令都不断地向你抛出此消息,请从 bootstrap/cache
文件夹中删除 config.php
文件。
之后再次运行
php artisan config:cache
【讨论】:
以上是关于迁移时未找到 Laravel 致命错误类的主要内容,如果未能解决你的问题,请参考以下文章
致命错误 Laravel:查看我的网站时未捕获 ReflectionException
致命错误:仅从在线下载为 zip 时未找到“ZipArchive”类
PHP 致命错误:在我修复错误 Laravel 迁移后找不到类“App\Providers\ServiceProvider”:唯一键太长,