外键约束错误地形成了laravel

问题描述 投票:1回答:3

当我想用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的初学者]

database laravel migration
3个回答
0
投票

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

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

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

0
投票

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


0
投票

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

另外代替:

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

使用:

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

(你有card而不是cards

© www.soinside.com 2019 - 2024. All rights reserved.