我正在尝试使用laravel添加迁移。这是mi迁移文件。
public function up() {
Schema::create('sl_categories', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('title')->nullable();
$table->integer('user_id')->unsigned()->nullable();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->softDeletes();
$table->timestamps();
});
Schema::create('sl_images', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('image')->nullable();
$table->integer('sl_category_id')->unsigned()->nullable();
$table->integer('display_order')->nullable();
$table->softDeletes();
$table->timestamps();
});
Schema::table('sl_images', function(Blueprint $table) {
$table->foreign('sl_category_id')->references('id')->on('sl_categories')->onDelete('cascade');
});
}
public function down() {
Schema::dropIfExists('sl_images');
Schema::dropIfExists('sl_categories');
}
但是不幸的是,我遇到了这个错误。
Illuminate \ Database \ QueryException:SQLSTATE [HY000]:常规错误: 1215无法添加外键约束(SQL:更改表
sl_images
添加约束sl_images_sl_category_id_foreign
外键 (sl_category_id
)在删除时引用了sl_categories
(id
) 级联)
答案 0 :(得分:0)
最后我找到了答案。问题是 InnoDB不允许在列引用不匹配的列类型的地方创建外键约束。如果简单地说,
这是一个大整数
$table->bigIncrements('id');
这是一个简单的整数。
$table->integer('sl_category_id')->unsigned()->nullable();
因此我们必须将后面的行更改为 bigInteger ,
$table->bigInteger('sl_category_id')->unsigned()->nullable();
我正在添加此答案,以防其他人找到它。