【问题标题】:getting 'SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint' error with migration迁移时出现“SQLSTATE [HY000]:一般错误:1215 无法添加外键约束”错误
【发布时间】:2021-06-15 19:04:57
【问题描述】:

尝试创建3个表,分别是权限,users_roles和permission_role。但是迁移时出现错误。

SQLSTATE[HY000]:一般错误:1215 无法添加外键约束(SQL:更改表permission_role 添加约束permission_role_permission_id_foreign 外键(permission_id)在删除级联时引用permissionsid))

这是我的迁移:

 public function up()
    {
        Schema::create('users_roles', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('user_id');            
            $table->nullableTimestamps();
        });
        Schema::create('permissions', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->text('definition')->nullable();
           
            $table->nullableTimestamps();            
        });       
    }   
    public function down()
    {
        Schema::dropIfExists('users_roles');
        Schema::dropIfExists('permissions');
    }
public function up()
    {
        Schema::create('permission_role', function (Blueprint $table) {
            $table->integer('permission_id')->unsigned();
            $table->integer('role_id')->unsigned();
            $table->nullableTimestamps();

            $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');
            $table->foreign('role_id')->references('id')->on('users_roles')->onDelete('cascade');

            $table->primary(['permission_id', 'role_id']);
        });
    }
    public function down()
    {
        Schema::dropIfExists('permission_roles');
    }

我使用 unsigned() 并且不明白我的代码有什么问题。

【问题讨论】:

  • 你没有提到你的 laravel 版本。无论如何,对于 role_id 也使用 bigInteger $table->bigInteger('permission_id')->unsigned();。还将您的所有主键 $table->increments('id'); 更改为 $table->bigIncrements('id');
  • 它有效!谢谢,但为什么他们应该以“大”开头

标签: php laravel migration


【解决方案1】:

因为 Laravel 5.8 添加了 bigIncrementsbigInteger 作为默认值。 Laravel 5.8 有一个官方升级指南中没有提到的变化。

有两种方法可以修复它:

将原来的 increments() 更改为 bigIncrements 并在您的外键列中执行 bigInteger() 而不是 integer()

【讨论】:

    猜你喜欢
    • 2019-07-27
    • 2021-03-31
    • 2018-07-29
    • 2020-03-25
    • 1970-01-01
    • 2019-08-02
    • 2020-11-12
    • 2021-07-03
    • 2020-01-14
    相关资源
    最近更新 更多