【发布时间】:2021-10-27 20:53:47
【问题描述】:
所以我在我的旧文件的template 之后创建了一个迁移文件,如下所示:
create_banners_table(这个WORKED)
class CreateBannersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('banners', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('order');
$table->string('published');
$table->timestamps();
});
Schema::create('banner_translations', function (Blueprint $table) {
$table->increments('id')->unsigned();
$table->string('locale', 10)->index();
$table->string('title');
$table->string('url');
$table->foreignId('banner_id')
->constrained()
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('banner_translations');
Schema::dropIfExists('banners');
}
}
这是create_managements_table(这个FAILED):
class CreateManagementsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('managements', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('order');
$table->string('published');
$table->string('name');
$table->string('category')
->comment('board of commissioners', 'board of executives');
$table->timestamps();
});
Schema::create('management_translations', function (Blueprint $table) {
$table->increments('id')->unsigned();
$table->string('locale', 10)->index();
$table->string('description');
$table->string('title');
$table->foreignId('management_id')
->constrained()
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('management_translations');
Schema::dropIfExists('managements');
}
}
问题是,当我尝试基于此创建另一个迁移文件时,我收到了这个错误:
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `management_translations` add constraint `management_translations_management_id_foreign` foreign key (`management_id`) references `management` (`id`) on delete cascade)
如您所见,两个转换表都引用了各自基表中的大整数(因此没有类型不匹配)。
为了进一步调查,我跑了SHOW ENGINE INNODB STATUS;
并检查了Latest Foreign Key Error 并得到以下信息:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2021-08-28 12:01:41 0x7f6f44091700 Error in foreign key constraint of table cemindo/#sql-200_7:
foreign key (`management_id`) references `management` (`id`) on delete cascade:
Cannot resolve table name close to:
(`id`) on delete cascade
【问题讨论】:
-
把
$table->bigIncrements('id');和$table->increments('id')->unsigned();改成$table->id();就可以解决你的问题了 -
...我已经为各自基表 bigIncrement 的两个引用 Id 所做的工作对于 Banner 工作得很好,但对于 Management 却失败了。 .. 想知道为什么
-
将两者都更改为
$table->id();仍然会导致相同的错误 -
个人建议,千万不要使用MySQL的
foreign关系,他们只会给你这些问题。如果您的代码是正确的,您仍然应该删除所有内容,就好像foreign存在一样。另外,请使用id();而不是increments,因为您没有正确定义它...您必须告诉它是id,并且您使用id或bigIncrements这样做。而且,超级重要,不要使用一次迁移来创建超过 1 个,100% 建议在单独的迁移中创建每个表,即使它们是相关的,你可以在这种情况下回滚每个。
标签: mysql laravel migration laravel-7 laravel-migrations