Php 加上「;“关于删除级联”;至Laravel中的现有柱

Php 加上「;“关于删除级联”;至Laravel中的现有柱,php,laravel,laravel-4,database-migration,Php,Laravel,Laravel 4,Database Migration,我的表中有user_id fk列 $table->foreign('user_id')->references('id')->on('users'); 我应该在现有列中添加“级联删除”功能。我该怎么做? $table->foreign('user_id') ->references('id')->on('users') ->onDelete('cascade'); Laravel schema builder无法在当前状态下修

我的表中有user_id fk列

$table->foreign('user_id')->references('id')->on('users');
我应该在现有列中添加“级联删除”功能。我该怎么做?

$table->foreign('user_id')
      ->references('id')->on('users')
      ->onDelete('cascade');
Laravel schema builder无法在当前状态下修改列,因此将使用原始查询。您必须删除并重新创建约束:

PostgreSQL

function up()
{
    DB::statement('alter table answers drop constraint answers_user_id_foreign,
                   add constraint answers_user_id_foreign
                   foreign key (user_id)
                   references users(id)
                   on delete cascade;'
    );
}
function down()
{
    DB::statement('alter table answers drop constraint answers_user_id_foreign,
                   add constraint answers_user_id_foreign
                   foreign key (user_id)
                   references users(id);'
    );
}
function up()
{
    DB::statement('alter table answers drop FOREIGN KEY answers_user_id_foreign;');
    DB::statement('alter table answers add constraint answers_user_id_foreign
                   foreign key (user_id)
                   references users(id)
                   on delete cascade;'
    );
}
function down()
{
    DB::statement('alter table answers drop FOREIGN KEY answers_user_id_foreign;');
    DB::statement('alter table answers add constraint answers_user_id_foreign
                   foreign key (user_id)
                   references users(id);'
    );
}
MySQL

function up()
{
    DB::statement('alter table answers drop constraint answers_user_id_foreign,
                   add constraint answers_user_id_foreign
                   foreign key (user_id)
                   references users(id)
                   on delete cascade;'
    );
}
function down()
{
    DB::statement('alter table answers drop constraint answers_user_id_foreign,
                   add constraint answers_user_id_foreign
                   foreign key (user_id)
                   references users(id);'
    );
}
function up()
{
    DB::statement('alter table answers drop FOREIGN KEY answers_user_id_foreign;');
    DB::statement('alter table answers add constraint answers_user_id_foreign
                   foreign key (user_id)
                   references users(id)
                   on delete cascade;'
    );
}
function down()
{
    DB::statement('alter table answers drop FOREIGN KEY answers_user_id_foreign;');
    DB::statement('alter table answers add constraint answers_user_id_foreign
                   foreign key (user_id)
                   references users(id);'
    );
}

我假设您使用
illumb\Database\Schema\Blueprint::primary()
创建
users.id
。如果是这种情况,则
users.id
将被取消签名。因此,您的外键列
用户id
也必须是未签名的。

首先删除外键。谢谢你的提示

$table->dropForeign('answers_user_id_foreign');
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');

谢谢你的问题回答。帮助我了解L5.1中的工作代码:

public function up()
{
    Schema::table('transactions', function (Blueprint $table) {
        $table->dropForeign('transactions_order_id_foreign');
        $table->foreign('order_id')
            ->references('id')->on('orders')
            ->onDelete('cascade')
            ->change();
    });

    Schema::table('orders', function (Blueprint $table) {
        $table->dropForeign('orders_user_id_foreign');
        $table->foreign('user_id')
            ->references('id')->on('users')
            ->onDelete('cascade')
            ->change();
    });
}

在我的例子中,我需要将col名称放入一个数组中,否则这将是一个错误

Schema::table('transactions', function (Blueprint $table) {
    $table->dropForeign(['transactions_order_id_foreign']);
    $table->foreign('order_id')
        ->references('id')->on('orders')
        ->onDelete('cascade')
        ->change();
});

mysql 5.7版本

在当前迁移中使用unsigned函数来
user\u id

$table->interger('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('table_name')->onDelete('cascade');

[Illumb\Database\QueryException]SQLSTATE[HY000]:一般错误:1005无法创建表“xxx.#sql-5d7_226”(错误号:121)(SQL:alter table
xxx
add constraint answers\u user\u id\u foreign key(
user\u id
)引用了
users
id
)上的delete cascade),那么您可能应该将其报告为一个bug,因为这是官方使用的原始查询
DB::语句(“…”)
。您的表名是什么?表名是“answers”@BrentConnor,如果已经迁移并投入生产,则是。否则您可以回滚迁移,编辑原始文件,然后再次迁移。至少在laravel 5.7中的$table->dropForeign('answers\u user\u id\u foreign');必须是:$table->dropForeign(['template\u id']);更短,删除外键时不需要知道命名约定:$table->dropForeign(['user_id'])如果我们删除外键,这些列或表上的数据会发生什么情况?@PrafullaKumarSahu您只是删除外键定义。您不会丢失任何数据。