首页 > 解决方案 > Laravel 迁移附加外键约束格式不正确

问题描述

尝试迁移文件但不断收到:(errno:150“外键约束格式不正确”)(SQL:alter table permission_roleadd constraint permission_role_permission_id_foreignforeign key ( permission_id) references permissions( id) on delete cascade)

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddForeignKeys extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        //
        Schema::table('permission_role', function(Blueprint $table) {
            $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');
            $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
        });
        Schema::table('role_user', function(Blueprint $table){
            $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        }); 
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //
    }
}


标签: laravellaravel-7

解决方案


首先,您应该分离所有迁移。确保首先创建roles,userspermissions(每个表都应该有自己的迁移)。然后继续创建其他的。

错误:150“外键约束格式不正确”)(SQL:alter table permission_role 添加约束permission_role_permission_id_foreign外键(permission_id)在删除级联时引用权限(id))

发生此错误是因为permissions尚未创建表,因此您无法在外键中引用它。


推荐阅读