外键约束格式不正确-Laravel

时间:2019-03-04 00:05:35

标签: php mysql laravel

我在XAMPP堆栈上使用Laravel 5.8。


考虑这两个迁移以创建两个表:

post_categories表。

Schema::create('post_categories', function (Blueprint $table) {
  $table->bigIncrements('id');
  $table->string('name');
  $table->string('slug');
  $table->string('status');
  $table->timestamps();
});

发布表格。

Schema::create('posts', function (Blueprint $table) {
  $table->bigIncrements('id');
  $table->string('name');
  $table->string('slug');
  $table->mediumText('description');
  $table->integer('views');
  $table->integer('post_category_id')->unsigned();
  $table->integer('user_id')->unsigned();
  $table->timestamps();

  $table->foreign('post_category_id')->references('id')->on('post_categories');
});

运行php artisan migrate时,出现以下错误:

  

一般错误:1005无法创建表testdb#sql-38d8_102(错误号:150“外键约束格式不正确”)。


我尝试同时运行这两者:

  • php artisan migrate
  • php artisan migrate:fresh

我还尝试将post_category_id字段更改为规则的整数,而不是无符号的:没有区别。

还重新启动了MySQL服务器和Apache服务,没有任何改变。

post_categories迁移在之前{strong>之前运行。 posts表已创建,但外键未创建。


为什么会引发此错误,我该如何解决?

3 个答案:

答案 0 :(得分:4)

这可能是因为您要创建一个将整数字段更改为大整数字段的外键。在您的信息迁移中,代替此

$table->bigInteger('post_category_id')->unsigned();

执行此操作:

make

答案 1 :(得分:0)

代替此:

$table->integer('post_category_id')->unsigned();

尝试一下:

$table->unsignedBigInteger('post_category_id');

答案 2 :(得分:0)

在链接两个表(用户表和存款表)时出现了相同的错误。我尝试了很多选择,但是它们没有用。但是,这对我来说是创建存款迁移的有效方法:

$table->unsignedInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');