外键约束错误地形成了laravel

时间:2017-12-21 08:42:07

标签: database laravel migration

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

首先确保在users之前创建notes$table->foreign('card_id')->references('id')->on('card')->onDelete('cascade');

另外代替:

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

使用:

card

(您有cards而不是let action1 = SKAction.fadeIn(withDuration: TimeInterval(0.2)) let action2 = SKAction.wait(forDuration: TimeInterval(0.4)) let action3 = SKAction.fadeOut(withDuration: TimeInterval(0.1)) let action4 = SKAction.perform(self.blinkLightByOrder, onTarget: UFOSprite._ufoBase) let action5 = SKAction.sequence([action1, action2, action3, action4]) currentLight.run(action5)

答案 2 :(得分:0)

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

Laravel按顺序迁移,所以有2个黑客可以解决这个问题:

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