Laravel 向表中添加外键

Posted

技术标签:

【中文标题】Laravel 向表中添加外键【英文标题】:Laravel add foreign key to a table 【发布时间】:2019-01-11 04:40:42 【问题描述】:

我正在尝试向我的用户表中添加一个 permission_id 外键,该表将引用我的权限表中的 id。目前我构建了以下迁移:

<?php
class AddPermissionIdForeignKeyToUsersTable extends Migration

    public function up()
    
        Schema::table('users', function (Blueprint $table) 
            $table->unsignedInteger('permission_id')->after('id');
            $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');
        );
    

    public function down()
    
        Schema::table('users', function (Blueprint $table) 
            $table->dropColumn('permission_id');
        );
    

但我收到以下错误:

SQLSTATE[23000]:违反完整性约束:1452 无法添加或 更新子行:外键约束失败 (eyes.#sql-22f0_3dd, 约束users_permission_id_foreign 外键 (permission_id) 引用 p ermissions (id) 开 DELETE CASCADE) (SQL: alter table users 添加约束 users_permission_id_foreign 外键 (permission_id) 引用 permissions (id) 删除级联)

在 PDOStatement.php 第 144 行:

SQLSTATE[23000]:违反完整性约束:1452 无法添加或 更新子行:外键约束失败 (eyes.#sql-22f0_3dd,约束users_permission_id_foreign 外键 (permission_id) 引用 p ermissions (id) 开 删除级联)

在 PDOStatement.php 第 142 行:

SQLSTATE[23000]:违反完整性约束:1452 无法添加或 更新子行:外键约束失败 (eyes.#sql-22f0_3dd, 约束users_permission_id_foreign 外键 (permission_id) 引用 p ermissions (id) 开 删除级联)

【问题讨论】:

【参考方案1】:

如果您的表 users 中已有数据,则需要将字段 permission_id 声明为可为空。

$table-&gt;unsignedInteger('permission_id')-&gt;nullable()-&gt;after('id');

【讨论】:

以上是关于Laravel 向表中添加外键的主要内容,如果未能解决你的问题,请参考以下文章

将包含外键的列添加到 Laravel 生产中的现有表中

在 laravel 中将数据从外键添加到数据库中

使用外键添加 laravel 迁移

将外键添加到用户表时 Laravel 7 错误

外键 Laravel 8 foreignId + 约束 - 无法添加或更新子行:外键约束失败

SQLSTATE[HY000]:一般错误:1215 无法在表用户中添加外键约束 Laravel