运行迁移时怎么修复外键错误

本教程将介绍运行迁移时如何修复外键错误的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

运行迁移时怎么修复外键错误 教程 第1张

问题描述

我不知道为什么它仍然不起作用并显示这个:

IlluminateDatabaseQueryException : SQLSTATE[HY000]: 一般错误:1005 无法创建表 db_rocnikovka.books(错误号:150外键约束的格式不正确")(SQL:alter tablebooks 添加约束 books_doba_foreign 外键(doba)参考 druh_knihies (id_druhu))

在 C:xampphtdocsRocnikovkavendorlaravelframeworksrcIlluminateDatabaseConnection.php:665

异常跟踪:1 PDOException::("SQLSTATE[HY000]: 一般错误: 1005 无法创建 > 表 db_rocnikovka.books (errno: 150 "外键约束格式不正确")")C:xampphtdocsRocnikovkavendorlaravelframeworksrcIlluminateDatabaseConnection.php:459

2 PDOStatement::execute()

  C:xampphtdocsRocnikovkavendorlaravelframeworksrcIlluminateDatabaseConnection.php:459

 catch (Exception $e) {
 throw new QueryException(
 $query, $this->prepareBindings($bindings), $e
 );
 }

第一张桌子

class CreateDruhKnihiesTable extends Migration
{
 public function up()
 {
  Schema::create('druh_knihies', function (Blueprint $table) {
$table->bigIncrements('id_druhu');
$table->string('nazev');
$table->timestamps();
  });
 }

 public function down()
 {
  Schema::dropIfExists('druh_knihies');
 }
}

第二张表

class CreateBooksTable extends Migration
{
 public function up()
 {
  Schema::create('books', function (Blueprint $table) {
$table->bigIncrements('id_book');
$table->string('nazev');
$table->string('autor');
$table->string('druh');
$table->unsignedInteger('doba');
$table->foreign('doba')->references('id_druhu')->on('druh_knihies');
$table->integer('pocet_stranek');
$table->timestamps();
  });
 }

 public function down()
 {
  Schema::dropIfExists('books');
 }
}

推荐答案

你的外键需要和它引用的键具有相同的类型.因此第二个表外键doba需要改成这个,因为你在第一个表主键中使用了BigIncrements().

$table->unsignedBigInteger('doba');

好了关于运行迁移时怎么修复外键错误的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。