General error: 1215 Cannot add foreign key constraint on tables
General error: 1215 Cannot add foreign key constraint on tables
我一直在根据其他堆栈问题和答案尝试所有可能的解决方案,但我仍然没有取得任何成功,所以我不得不提出自己的问题。
我有以下架构
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]: General error: 1215 Cannot add foreign key constraint (SQL: alter table claims
add constraint claims_file_id_
foreign
foreign key (file_id
) references file_data
(id
) on delete cascade)
- 表是 Innob
- 列的类型相同
- 这些列是无符号的
- 文件运行顺序正确
- 唯一的区别是 file_id 需要为空(它们必须是)
是不是因为列是"null"所以失败了?我试过了,但它没有为空,但仍然失败了。还有哪些其他原因可能导致它出现此问题?
原来我需要对列进行索引
我一直在根据其他堆栈问题和答案尝试所有可能的解决方案,但我仍然没有取得任何成功,所以我不得不提出自己的问题。
我有以下架构
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]: General error: 1215 Cannot add foreign key constraint (SQL: alter table
claims
add constraintclaims_file_id_ foreign
foreign key (file_id
) referencesfile_data
(id
) on delete cascade)
- 表是 Innob
- 列的类型相同
- 这些列是无符号的
- 文件运行顺序正确
- 唯一的区别是 file_id 需要为空(它们必须是)
是不是因为列是"null"所以失败了?我试过了,但它没有为空,但仍然失败了。还有哪些其他原因可能导致它出现此问题?
原来我需要对列进行索引