为什么必须运行“ composer dump-autoload”命令才能使迁移在laravel中工作?


79

我已经在应用程序中构建了一些迁移类来创建所需的表,但是却不断出错。我需要运行以下命令:

composer dump-autoload

只有这样,它才能再次按预期工作。我做错了什么会产生此错误,或者这是迁移的正常行为?

以下是运行迁移过程时遇到的错误:

  [Symfony\Component\Debug\Exception\FatalErrorException]  
  Class 'CreateVideoStatusTable' not found  

您是否使用phpartisan进行迁移?
登娜

是的,我正在使用它来生成创建表并运行迁移
Hasan Al-Natour

你有使用Illuminate \ Database \ Schema \ Blueprint; 使用Illuminate \ Database \ Migrations \ Migration; 在文件中并扩展了Migration类?
登娜

是,使用“使用Illuminate \ Database \ Schema \ Blueprint”和“使用Illuminate \ Database \ Migrations \ Migration”。
Hasan Al-Natour 2015年

通常,当我创建迁移文件时,它们看起来类似于此codeshare.io/3iRxd,以查看您的文件是否遵循类似的模式,如果不是,则需要确保您正在扩展Migration类。一切看起来还好吗?
登娜

Answers:


92

好的,我想我知道您遇到的问题。

基本上,由于Composer无法看到您正在创建的迁移文件,因此您必须运行dump-autoload命令,该命令不会下载任何新内容,而是查找它需要再次包含的所有类。它只是重新生成需要包含在项目中的所有类的列表(autoload_classmap.php),这就是为什么运行该命令后迁移仍在进行的原因。

如何修复(可能)您需要在composer.json文件中添加一些额外的信息。

"autoload": {
    "classmap": [
        "PATH TO YOUR MIGRATIONS FOLDER"
    ],
}

您需要将迁移文件夹的路径添加到类映射数组。然后运行以下三个命令...

php artisan clear-compiled 
composer dump-autoload
php artisan optimize

这将清除当前已编译的文件,更新所需的类,然后将它们写回,因此您无需再次执行。

理想情况下,您可以执行composer dump-autoload -o,以更快地加载网页。它不是默认值的唯一原因是,它需要花费更长的时间来生成(但只有一点点值得注意)。

希望您能设法将其排序,因为确实很烦人:(


5
我不明白laravel为什么不处理这个问题,这是一个很好的框架。
哈桑·纳图尔

我已经有了这个的composer.json文件:“自动加载”:{“类映射”:[“数据库”],“ psr-4”:{“应用程序\”:“应用程序”}},
哈桑·阿尔- Natour

我应该如何添加路径?
Hasan Al-Natour

我在运行“ php artisan dump-autoload”时出错:[InvalidArgumentException]命令“ dump-autoload”未定义。
Hasan Al-Natour

4
抱歉,您需要使用composer,而不是php artisan。所以它的作曲家dump-autoload
Duenna


2

简短的答案:类映射是静态的,而PSR自动加载是动态的。

如果您不想使用类映射,请改用PSR自动加载。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.