外键约束错误地形成了laravel

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了外键约束错误地形成了laravel相关的知识,希望对你有一定的参考价值。

当我想用migratemigrate:fresh命令迁移我的迁移时,我得到了This Error

这些是我的迁移:

public function up()
{
    Schema::create('notes', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned()->index();
        $table->integer('card_id')->unsigned()->index();
        $table->text('body');
        $table->timestamps();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->foreign('card_id')->references('id')->on('card')->onDelete('cascade');
    });
}


public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('username');
        $table->string('email');
        $table->string('password');
        $table->timestamps();
    });
}

public function up()
{
    Schema::create('cards', function (Blueprint $table) {
        $table->increments('id');
        $table->string('title');
        $table->timestamps();
    });
}

我只是尝试了什么,我不知道我该怎么办[我是laravel的初学者]

答案

基本上您的notes表是在users表之前创建的,因此是外键错误。它可以找到users表,因为它不存在(还)

Laravel按顺序迁移,因此有2个hacks来解决这个问题:

  1. 更改用户迁移文件的时间戳,以便首先执行
  2. 更常见的黑客攻击是完全针对外键关系进行单独迁移。然后更改时间戳,使其最后执行。这样,您就知道在执行fk迁移时所有表都将存在
另一答案

您需要更改迁移文件中的日期和时间,因此在cards表之前创建了usersnotes表。

另一答案

首先要确保在cards之前创建usersnotes

另外代替:

$table->foreign('card_id')->references('id')->on('card')->onDelete('cascade');

使用:

$table->foreign('card_id')->references('id')->on('cards')->onDelete('cascade');

(你有card而不是cards

以上是关于外键约束错误地形成了laravel的主要内容,如果未能解决你的问题,请参考以下文章

MySQL创建表:错误1005 errno:150“外键约束形成错误”

在 Laravel 8 中获取“错误地通知外键约束”

添加外键时Laravel迁移错误

Laravel 迁移错误号:150“外键约束格式不正确”

Laravel 迁移:“外键约束格式不正确”(errno 150)

Laravel 迁移错误:150“外键约束格式不正确”