我一直在尝试基于其他堆栈问题和答案的所有可能的解决方案,但我仍然没有取得任何成功,所以我不得不提出自己的问题。
我有以下架构
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”导致它失败吗?我在它不为空的情况下尝试了它,但仍然失败。还有哪些其他原因可能导致它出现此问题?