Laravel 5.7:上一次迁移创建表,但未在迁移表中注册

时间:2018-12-17 08:35:45

标签: php mysql laravel

Laravel版本:5.7

PHP版本:7.2.9

数据库驱动程序和版本:mysql

说明 上次迁移创建表,但未在迁移表中注册

复制步骤 我有14次迁移。 如果我运行php artisan migrate 该表已创建但未注册为运行迁移 我已经删除了宅基地数据库几次

my migration status table

最终,当我出于开发目的而想要刷新,回滚或迁移时,出现此错误,告诉我该表存在,但不在迁移上

vagrant@kakbima:~/code$ php artisan migrate
Migrating: 2018_12_13_091954_create_product_subcategories_table
  

Illuminate \ Database \ QueryException:SQLSTATE [42S01]:基表或   视图已经存在:1050表'product_subcategories'已经存在   (SQL:创建表product_subcategories(id int unsigned not null   auto_increment主键,名称varchar(191)不为null,   product_category_id int unsigned不为null,created_at时间戳为null,   Updated_at timestamp null)默认字符集utf8mb4整理   'utf8mb4_unicode_ci')

public function up()
    {
        Schema::create('product_subcategories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->unsignedInteger('product_category_id');
            $table->foreign('product_category_id')
                    ->references('id')->on('product_categories')
                    ->onUpdate('cascade')
                    ->onDelete('cascade');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        DB::statement('SET FOREIGN_KEY_CHECKS = 0');
        Schema::dropIfExists('product_subcategories');
        DB::statement('SET FOREIGN_KEY_CHECKS = 1');
    }

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,解决方法是来自https://laracasts.com/discuss/channels/laravel/migrated-migration-files-not-listed-in-migration-table?page=1 这是帖子:

好的,所以...对于任何在谷歌搜索后试图找出原因的人(而归类/字符集都不是问题)之后遇到此问题的人,这就是我们的发现。

我们的第一次迁移只是一个简单的\ DB :: unprepared(file_get_contents( DIR 。'/ .. / initial.sql'));;它将导入一个现有数据库(在开始之前制作)使用迁移)。我们发现,进行了3​​-4次迁移,即使迁移正在运行(并且更改已提交到数据库),它也只是停止将它们注册为“运行”。

很奇怪!最终,我们发现在上述.sql文件的顶部,有一条偷偷摸摸的行显示SET AUTOCOMMIT = 0 ;,并且没有任何内容将其设置回文件末尾的初始值。这导致迁移中的所有内容混乱,并且不再将某些迁移注册为已运行。

只需删除SET AUTOCOMMIT = 0; .sql文件中的内容为我们减轻了该问题。

我希望这对其他人有帮助,如果没有,我希望将来在我不可避免地在一年内再次遇到同一问题时能找到这个答案?