Laravel迁移:类“未找到”

时间:2015-06-13 14:44:21

标签: php symfony laravel azure

我正在向Microsoft Azure部署Laravel准系统项目,但每当我尝试执行php artisan migrate时,我都会收到错误:

  

[2015-06-13 14:34:05] production.ERROR:异常'Symfony \ Component \ Debug \ Exception \ FatalErrorException',在D:\ home \ site \ vendor \中找不到消息'Class'' laravel \框架\ SRC \照亮\数据库\迁移\ Migrator.php:328

堆栈追踪:

 #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');
    }
}

17 个答案:

答案 0 :(得分:88)

对于PSR-4 Auto Loader用户(composer.json):

将迁移文件夹保留在classmap数组中,并且不要将其包含在autoload下的psr-4对象中。由于迁移主类Migrator不支持命名空间。例如;

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

然后运行:

php artisan clear-compiled 
composer dump-autoload
php artisan optimize
  • 首先清除所有已编译的文件。
  • 第二次更新autoload_psr4.php并几乎清空autoload_classmap.php
  • 第三个更新autoload_classmap.php

从此时起,您不必再次执行此操作,任何新的迁移都将正常运行。

答案 1 :(得分:36)

如果在运行迁移时遇到“未找到类错误”,请尝试运行此命令。

composer dump-autoload 

然后重新发出migrate命令。在官方网站上查看更多详细信息(#Running Migrations):http://laravel.com/docs/master/migrations#running-migrations

答案 2 :(得分:12)

我曾经有同样的问题。显然这是一个常见问题,因为在Laravel的文档中,它甚至建议:http://laravel.com/docs/master/migrations#running-migrations

基本上你所要做的就是刷新一些作曲家文件。只需运行:

composer dump-autoload

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

答案 3 :(得分:12)

只需确保您的迁移文件名与您的班级名称相同。

即:

如果文件名是:

from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.keys import Keys import time from multiprocessing import Process import sys driver = webdriver.Chrome() driver.get("https://www.google.com") actions = ActionChains(driver) about = driver.find_element_by_link_text('About') actions.key_down(Keys.CONTROL).click(about).key_up(Keys.CONTROL).perform() driver.switch_to.window(driver.window_handles[0]) driver.get("https://stackoverflow.com") def func1(): while True: driver.get("https://stackoverflow.com") time.sleep(1) driver.get("https://www.google.com") time.sleep(1) def func2(): while True: driver.get("https://en.wikipedia.org/wiki/Main_Page") time.sleep(1) driver.get("https://store.google.com/?srp=/product/google_home") time.sleep(1) if __name__=='__main__': driver.switch_to.window(driver.window_handles[0]) p1 = Process(target = func1) p1.start() driver.switch_to.window(driver.window_handles[1]) p2 = Process(target = func2) p2.start()

然后上课应该是:

xxx_151955_create_post_translations_table.php

答案 4 :(得分:8)

我也遇到了同样的问题。

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

之后,我跑了

  

composer dump-autoload

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

答案 5 :(得分:6)

我删除了其中一个迁移文件。遇到同样的问题,而php artisan migrate:rollback

然后我尝试composer dump-autoload。同样出现了。

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

答案 6 :(得分:3)

将Laravel 5.2 dev项目移至生产后,我遇到了类似的情况(找不到类错误)。生产服务器正在寻找班级&#34;项目&#34;但控制器名称是Project.php。一旦我将文件重命名为project.php,就可以了。

答案 7 :(得分:3)

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

如果您更改了迁移文件名,请确定其内部类名。

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

答案 8 :(得分:3)

对我来说,问题是我已将我的迁移命名为2017_12_15_012645_create_modules_problems.php,其类名为CreateModulesProblemsTable。一旦我将_table添加到文件名,一切正常。

答案 9 :(得分:2)

我愚蠢地说:

namespace database\migrations;

我的迁移内容create_users_table.php [2014_10_12_000000_create_users_table.php]

我遇到了类似的错误 - Class&#39; CreateUsersTable&#39;未找到。

在顶部删除此行可解决此错误。

答案 10 :(得分:2)

尝试迁移项目时,我收到同一个类未找到错误。有时它会让你感到简单。在我的情况下,我注意到我的班级名称在我的迁移文件中不正确,因为我在早期进行了重命名更改而没有在整个过程中进行更改。

在更正了类名后,我执行了一个composer dump-autoload,我的问题就消失了。

HTH某人:]

答案 11 :(得分:1)

只需删除表migrations 上数据库中的行即可解决问题。迁移时不再显示

其他方式是简单地创建它取决于你想要的文件,在我的情况下我想摆脱这种迁移。 :)

答案 12 :(得分:1)

当我将迁移重命名为时,我会遇到此问题:

0_create_activities_table.php

我将其重命名为:

2019_10_01_0_create_activities_table.php

答案 13 :(得分:1)

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

示例:

如果迁移名称为:

2020_10_31_161839_create_notifications_table

然后该类名称应为:

CreateNotificationsTable

答案 14 :(得分:0)

在我的情况下是数据库的自动递增,过去我确实手动删除了一个条目,而AUTO_INCREMENT指向的是表中下一个ID以外的另一个。

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

答案 15 :(得分:0)

只需确保以下两个文件包含正确的类名称和迁移名称:

C:\ xampp \ htdocs \ StuffSpot \ vendor \ composer \ autoload_classmap.php C:\ xampp \ htdocs \ StuffSpot \ vendor \ composer \ autoload_static.php

答案 16 :(得分:0)

当我重命名一个迁移文件并解决了这个问题时,我遇到了一种情况,只是在迁移表中我也重写了记录,一切正常。

相关问题