0

我一直在尝试基于其他堆栈问题和答案的所有可能的解决方案,但我仍然没有取得任何成功,所以我不得不提出自己的问题。

我有以下架构

Schema::create('file_data', function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->increments('id');

……

        Schema::create('claims', function (Blueprint $table) {
            $table->engine = 'InnoDB';
         ....
            $table->integer('file_id')->unsigned()->nullable()->default(DB::raw('NULL'));

          ....
            $table->foreign('budget_id')
                ->references('id')
                ->on('budgets')
                ->onDelete('cascade');

        });

        Schema::create('claims_details', function (Blueprint $table) {
            $table->engine = 'InnoDB';
           .........
            $table->integer('file_id')->unsigned()->nullable()->default(DB::raw('NULL'));
          ..........

        });

在另一个文件中

Schema::table('claims', function(Blueprint $table){
        $table->foreign('file_id')
            ->references('id')
            ->on('file_data')
            ->onDelete('cascade');
      });

      Schema::table('claims_details', function(Blueprint $table){
        $table->index(['invoice_date','claim_id']);
        $table->foreign('claim_id')
            ->references('id')
            ->on('claims')
            ->onDelete('cascade');
            $table->foreign('file_id')
                ->references('id')
                ->on('file_data');
      });

当我运行命令时php artisan migrate出现以下错误

[Illuminate\Database\QueryException] SQLSTATE[HY000]:一般错误:1215 无法添加外键约束(SQL:删除级联时更改表claims添加约束claims_file_id_ foreign外键(file_id)引用file_data( ))id

  • 桌子是Innob
  • 列的类型相同
  • 列是无符号的
  • 文件以正确的顺序运行
  • 唯一的区别是 file_id 需要为空(它们必须是)

是因为该列是“null”导致它失败吗?我在它不为空的情况下尝试了它,但仍然失败。还有哪些其他原因可能导致它出现此问题?

4

1 回答 1

1

原来我需要对列进行索引

于 2017-05-08T14:47:41.773 回答