Laravel将外键添加到表中

Laravel将外键添加到表中

问题描述:

I am trying to add a permission_id foreign key to my users table which shall reference the id in my permissions table. Currently I built following Migration:

<?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');
        });
    }
}

But I get following error:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (eyes.#sql-22f0_3dd, CONSTRAINT users_permission_id_foreign FOREIGN KEY (permission_id) REFERENCES p ermissions (id) ON DELETE CASCADE) (SQL: alter table users add constraint users_permission_id_foreign foreign key (permission_id) references permissions (id) on delete cascade)

In PDOStatement.php line 144:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (eyes.#sql-22f0_3dd, CONSTRAINT users_permission_id_foreign FOREIGN KEY (permission_id) REFERENCES p ermissions (id) ON DELETE CASCADE)

In PDOStatement.php line 142:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (eyes.#sql-22f0_3dd, CONSTRAINT users_permission_id_foreign FOREIGN KEY (permission_id) REFERENCES p ermissions (id) ON DELETE CASCADE)

If you have already data in your table users you need to declare your field permission_id as nullable.

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