迁移时未找到 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-autoloadartisan 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. 好用吧

php artisan 迁移:安装 php 工匠迁移

输出是:

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”:唯一键太长,

Laravel - PHP 致命错误:在迁移中找不到类“CreateMatchesTable”:刷新

Laravel:在迁移之前删除迁移:重置

带有 Codeception 的 Laravel 4 模型单元测试 - 未找到“Eloquent”类