Laravel 迁移:Class "not found"

7 浏览
0 Comments

Laravel 迁移:Class "not found"

我正在将一个 Laravel 的裸项目部署到 Microsoft Azure,但是每次我尝试执行php artisan migrate时都会出现错误:

[2015-06-13 14:34:05] production.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message '找不到类'' in D:\home\site\vendor\laravel\framework\src\Illuminate\Database\Migrations\Migrator.php:328

堆栈跟踪:

 #0 {main}  

可能是什么问题?非常感谢。

-- 编辑 --

迁移类

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');
        });
    }
    /**
     * 撤销迁移。
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }
}

0
0 Comments

当运行迁移时,如果出现“Class not found”错误,请尝试运行以下命令:

composer dump-autoload

,然后重新运行迁移命令。更多详情请参考官方网站(#Running Migrations):http://laravel.com/docs/master/migrations#running-migrations

如果上述方法仍然无效,持续出现“not found”错误。我已经注释掉了默认的迁移文件(users和password_resets),以免出现"SQLSTATE[42000]: Syntax error specified key was too long; max key length is 767 bytes (SQL error)"[Illuminate\Database\QueryException][PDOExeption])。这些文件是默认的!为什么我无法正常使用这些命令...而且migrate:reset和:rollback命令给出Nothing to rollback.的错误提示。你能帮忙解决吗?

解决方法:运行composer dump-autoload命令可以重新加载Laravel项目的自动加载器,从而解决“Class not found”错误。如果这个方法无效,可能是因为默认的迁移文件被注释掉了,导致无法正常使用迁移命令。可以尝试取消注释这些默认迁移文件,然后重新运行迁移命令。另外,如果migrate:reset和:rollback命令提示Nothing to rollback.,可能是因为还没有进行过任何迁移操作,或者已经回滚到了最初的状态,没有可以回滚的内容。

0
0 Comments

问题的原因是迁移文件的文件名与类名不一致。解决方法是确保迁移文件的文件名与类名相同。例如,如果文件名是xxx_151955_create_post_translations_table.php,那么类名应该是CreatePostTranslationsTable

如果你正在使用Laravel 9,这个问题就不再存在,因为迁移类的表示方式如下:return new class extends Migration。请记住,xxx是一个带下划线(_)的日期,我错误地使用了连字符(-),导致无法找出问题出在哪里...

0
0 Comments

Laravel migrations: Class "not found"问题的出现原因是因为迁移文件没有命名空间,所以无法通过命名空间机制进行自动加载。解决方法是将迁移文件夹放在"classmap"数组中,并且不要在"autoload"头部的psr-4对象中包含它。然后运行一系列命令来重新生成自动加载映射。首先运行"php artisan clear-compiled"命令清除所有已编译的自动加载文件,然后运行"php artisan optimize:clear"命令清除Laravel缓存(可选),接下来运行"composer dump-autoload"命令为命名空间类构建自动加载器,最后运行"php artisan optimize"命令优化Laravel应用程序的各个部分并为非命名空间类构建自动加载器。从此以后,就不需要再次执行这些命令,任何新的迁移都会正常工作。

这样操作的原因是因为迁移文件没有命名空间,所以尝试通过命名空间机制(如psr-4等)进行自动加载是无意义的。composer.json文件中的classmap类别是为这些类而设计的。上述命令只是根据新的设置重新生成所有自动加载映射。

在执行了第一个命令后,如果尝试运行项目时出现"Erroneous data format for unserializing 'Symfony\Component\Routing\CompiledRoute'"错误,可以按照以下步骤进行修复:1. 删除/bootstrap/cache/routes.php文件;2. 运行composer require symfony/routing:v4.2.0命令;3. 运行php artisan route:cache命令(该步骤可能无法成功完成,因为项目可能使用另一个版本的symfony路由,但无论如何它都会起作用)。

以上就是解决Laravel migrations: Class "not found"问题的原因和解决方法。

0