【问题标题】:Cannot find Foreign key constraint index找不到外键约束索引
【发布时间】:2019-04-18 09:16:06
【问题描述】:

我的run_tasks 表有外键completer_guest_id,我需要引用其他表的列。

Schema::table('run_tasks', function (Blueprint $t) {
            $t->integer('completer_id')->nullable();
            $t->foreign('completer_id')->references('id')->on('users');
            $t->integer('completer_guest_id')->nullable();
            $t->foreign('completer_guest_id')->references('id')->on('tasks_guests');
        });

但我找不到索引:run_tasks_completer_guest_id_foreign 因此,我无法删除外键约束并删除此迁移中的列:

Schema::table('run_tasks', function (Blueprint $table){
            $table->dropForeign('run_tasks_completer_guest_id_foreign');
            $table->dropColumn('completer_guest_id');
            $table->integer('completer_guest_id')->nullable();
            $table->foreign('completer_guest_id')
                ->references('id')
                ->on('guests')
                ->onDelete('cascade');
        });

我得到这个error,当我运行\d run_tasks时,我看到this 这个问题有解决办法吗?

【问题讨论】:

  • 我发现有时候分离查询可以解决一些删除索引的问题,值得一试
  • 感谢@user10341554 值得一试,因为它有效!

标签: laravel postgresql migration


【解决方案1】:

删除表并尝试将创建和外键分配分开

    Schema::dropIfExists('run_tasks');
    Schema::create('run_tasks', function (Blueprint $table) {
        $table->integer('completer_id')->nullable();
        $table->integer('completer_guest_id')->nullable();
        $table->index(['completer_id', 'completer_guest_id']); 
    });       
    Schema::table('run_tasks', function(Blueprint $table) {           
        $table->foreign('completer_id')->references('id')->on('users')->onDelete('cascade');
        $table->foreign('completer_guest_id')->references('id')->on('guests')->onDelete('cascade');
    });

【讨论】:

  • 嗨,你知道为什么要分离这些作品吗?这是我必须做的事情,但我还没有找到一个明确的答案来解释为什么会这样。
  • 那是个谜……我在创建Migration Generator时发现了这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 2011-04-28
  • 2017-09-16
  • 2016-05-23
相关资源
最近更新 更多