Laravel无法添加外键约束

Jam*_*mie 1 php laravel-5

当我尝试在Laravel 5中通过迁移设置外键约束时,收到错误消息:

[Illuminate \ Database \ QueryException] SQLSTATE [HY000]:常规错误:1215无法添加外键约束(SQL:在删除级联上,alter table rittenregistratie添加合作rittenregistratie_karakterrit_id_foreign外键(karakterrit_id)引用karakterritid))[PDOException] SQLSTATE [HY000]:常规错误:1215无法添加外键约束D:\ wamp \ www>

但是我现在知道为什么了吗???迁移顺序正确,为什么我会收到此错误?表rittenregistratie具有一个名为karakterrit_id的外键,这是表karakterrit中的主键。

这是我的迁移rittenregistratie:

 public function up()
    {
        Schema::create('rittenregistratie', function (Blueprint $table) 
        {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->timestamps('datum');
            $table->integer('beginstand');
            $table->integer('eindstand');
            $table->text('van');
            $table->text('naar');
            $table->text('bezoekadres');
            $table->text('geredenroute');
            $table->integer('karakterrit_id')->default(1);
            $table->text('toelichting');
            $table->integer('kilometerszakelijk');
            $table->integer('kilomteresprive'); 

            $table->foreign('user_id')
                        ->references('id')
                        ->on('users')
                        ->onDelete('cascade');

            $table->foreign('karakterrit_id')
                        ->references('id')
                        ->on('karakterrit')
                        ->onDelete('cascade');    
        });
    }
Run Code Online (Sandbox Code Playgroud)

小智 6

$table->integer('karakterrit_id')->unsigned()->default(1);
Run Code Online (Sandbox Code Playgroud)

您是否创建了users表并karakterrit在查询中使用了表。如果同时具有两个表,请检查迁移文件的创建日期,并在引用它们的其他表之前创建它们。

另一个问题可能是MyISAM不支持。而是使用InnoDB

DB::statement('ALTER TABLE categories ENGINE = InnoDB');
Run Code Online (Sandbox Code Playgroud)