Laravel无法添加外键约束

时间:2015-08-31 20:25:08

标签: php laravel-5

当我尝试使用迁移在laravel 5中设置外键约束时,我收到错误:

  

[Illuminate \ Database \ QueryException] SQLSTATE [HY000]:常规   错误:1215   无法添加外键约束(SQL:alter table   rittenregistratie添加co nstraint   rittenregistratie_karakterrit_id_foreign外键   (karakterrit_id)在删除时引用karakterritid)   cascade)[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');    
        });
    }

3 个答案:

答案 0 :(得分:5)

添加

$table->integer('karakterrit_id')->unsigned()->default(1);

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

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

DB::statement('ALTER TABLE categories ENGINE = InnoDB');

答案 1 :(得分:1)

在大多数情况下,被引用的列必须是主键或具有我发现的唯一键

答案 2 :(得分:0)

Laravel 8的一个常见问题是,在其上创建了foreign_id的表是早先创建的。因此,在运行迁移时,它们按顺序运行,并且找不到外部ID引用的表。如果您看到这种情况,则会将第二张表的名称更改为较早的日期,并进行排序。

所以说将2020_12_04_081855_create_developers_table.php重命名为2020_12_03_081855_create_developers_table.php。

那会解决的。请记住,日期应该早于第一个表格。