运行迁移时怎么修复外键错误
本教程将介绍运行迁移时如何修复外键错误的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。
问题描述
我不知道为什么它仍然不起作用并显示这个:
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');
好了关于运行迁移时怎么修复外键错误的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。