Laravel 迁移: 类“未找到”

我正在向微软 Azure 部署一个 Laravel 基本项目,但是每当我尝试执行 php artisan migrate时都会出现错误:

[2015-06-1314:34:05] production.ERROR: Exception“ Symfony Component Debug Exception FatalErrorException”with message“ Class”not found”in D: home site;

堆栈跟踪:

 #0 {main}

有什么问题吗? 非常感谢

编辑

迁移类

<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;


class CreateUsersTable extends Migration {


/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->bigIncrements('id');
$table->string('name', 50);
$table->string('surname', 50);
$table->bigInteger('telephone');
$table->string('email', 50)->unique();
$table->string('username', 50)->unique();
$table->string('password', 50);
$table->boolean('active')->default(FALSE);
$table->string('email_confirmation_code', 6);
$table->enum('notify', ['y', 'n'])->default('y');
$table->rememberToken();
$table->timestamps();
            

$table->index('username');
});
}


/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('users');
}
}
100837 次浏览

如果在运行迁移时遇到“ Class not found error”,请尝试运行此命令。

composer dump-autoload

然后重新发出迁移命令。详细信息请参阅官方站点(# RuningMigations) : http://laravel.com/docs/master/migrations#running-migrations

我以前也遇到过同样的问题。显然,这是一个常见的问题,因为在 Laravel 的文档中,它甚至建议使用: http://laravel.com/docs/master/migrations#running-migrations

基本上,你所要做的就是刷新一些作曲家文件:

composer dump-autoload

这将刷新作曲家自动加载文件,然后您可以运行您的正常迁移,它应该工作! 非常好。

对于 PSR-4自动装载程序用户(poser.json) :

将迁移文件夹保存在 classmap数组中,不要将它包含在 autoload头部下的 psr-4对象中。因为迁移的主类 Migator 不支持名称空间。例如:

"autoload": {
"classmap": [
"app/database/migrations"
],
"psr-4": {
"Acme\\controllers\\": "app/controllers"
}
}

然后跑:

php artisan clear-compiled
php artisan optimize:clear
composer dump-autoload
php artisan optimize
  • 第一个清除所有已编译的自动加载文件。
  • Second 清除 Laravel 缓存(可选)
  • 第三,为命名空间类构建自动加载程序。
  • 第四,优化 Laravel 应用程序的各个部分,并为没有名称空间的类构建自动加载程序。

从现在开始,您将不必再次执行此操作,任何新的迁移都将正常工作。

我也遇到了同样的问题。

我的解决方案是删除迁移文件,并从数据库中的“迁移”表中删除记录。

之后,我就跑了

作曲家自动加载转储

并最终能够重置/回滚迁移。

我删除了一个迁移文件。面临同样的问题,而 php artisan migrate:rollback

然后我试了 composer dump-autoload,又出现了同样的结果。

我恢复了已删除的文件,并尝试了 composer dump-autoloadphp artisan migrate:rollback

在将 Laravel5.2开发项目转移到生产环境后,我遇到了类似的情况(类未发现错误)。生产服务器正在寻找类“ project”,但是控制器的名称是 Project.php。一旦我将文件重命名为 project.php,就可以开始了。

在尝试迁移我的项目时,我收到了相同的类未发现错误。有时候就是这些简单的事情让你。在我的例子中,我注意到我的类名在迁移文件中不正确,这是因为我在早期进行了重命名更改,并且没有在整个迁移过程中进行更改。

在更正了类名之后,我执行了一个作曲家 dump-autoload,我的问题就解决了。

有人: ]

对于我来说,问题是我已经将我的迁移命名为2017 _ 12 _ 15 _ 012645 _ create _ module _ problem. php,类名为 CreateModulesTroumsTable。只要我将 _ table 添加到文件名中,一切都很正常。

我愚蠢地写道:

namespace database\migrations;

在我的迁移中 create _ users _ table. php [2014 _ 10 _ 12 _ 000000 _ create _ users _ table. php ]

我得到了一个类似的错误-类“ CreateUsersTable”未找到。

删除顶部的这一行解决了这个错误。

只需确保您的迁移文件名与您的类名相同。

即:

如果文件名为:

xxx_151955_create_post_translations_table.php

那么课程应该是:

CreatePostTranslationsTable


如果您正在使用 Laravel9,那么就没有必要出现这样的问题,因为迁移类是这样表示的:

return new class extends Migration

只需删除表 migrations 上数据库中的行,就可以解决这个问题。当您进行迁移时,它将不再显示

另一种方法是简单地创建文件,它取决于你想要什么,在我的例子中,我想摆脱这个迁移。:)

我认为现在回答这个问题已经太晚了,但是也许这会对某些人有所帮助。

如果更改了迁移文件名,请确保它的内部类名。

例如,如果我将迁移名称从 2018_06_10_079999_create_admins_table.php更改为 2018_06_10_079999_create_managers_table.php,那么它的内部类名称也必须从 CreateAdminsTable更改为 CreateManagerTable

在我的例子中是数据库的自动增量,在过去我确实手动删除一个条目,并且 AUTO_INCREMENT比表中的下一个 id 多指向一个。

显然 Laravel 使用 AUTO_INCREMENT-1知道哪是最后一次迁移。

只要确保以下两个文件包含正确的类名和迁移名即可:

作曲家 autoload _ classmap. php 作曲家 autoload _ static. php

当我将迁移重命名为:

0 _ create _ activity _ table. php

当我把它重命名为:

2019 _ 10 _ 01 _ 0 _ create _ activity _ table. php

确保您的迁移文件名与迁移类名匹配

例如:

如迁移名称为:

2020 _ 10 _ 31 _ 161839 _ create _ 

那么类名应该是:

CreateNotificationsTable

当我重命名一个迁移文件并解决这个问题时,我遇到了一个情况,就在迁移表中,我还重写了记录,所有的工作都正常。

对于那些在 Symfony 经营 abc0时偶然发现这一点的人:

语法现在已经从:

bin/console doctrine:migrations:execute 20220216142804 --down

致:

bin/console doctrine:migrations:execute 'DoctrineMigrations\Version20220216142804' --down

现在您必须在引号中给出 FQDN (没有第一个反斜杠) ,而不是像以前那样仅仅从类名自动生成时间戳。