将"ON DELETE CASCADE"添加到Laravel中的现有列

Far*_*mov 32 php database-migration laravel laravel-4

我的表中有user_id fk列

$table->foreign('user_id')->references('id')->on('users');
Run Code Online (Sandbox Code Playgroud)

我应该现有列添加级联删除功能.我怎样才能做到这一点?

Far*_*mov 67

先删掉外键.感谢Razor的提示

$table->dropForeign('answers_user_id_foreign');
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
Run Code Online (Sandbox Code Playgroud)

  • 更短,删除外键时不需要知道命名约定: $table->dropForeign(['user_id']) (4认同)
  • 如果我们删除外键,这些列或表上的数据会发生什么情况? (2认同)
  • @PrafullaKumarSahu,您只是放弃了外键定义。您不会丢失任何数据。 (2认同)

sha*_*eoh 8

就我而言,我需要将 col 名称放在一个数组中,否则会出错。

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

mysql 5.7 版本


Mar*_*ker 7

$table->foreign('user_id')
      ->references('id')->on('users')
      ->onDelete('cascade');
Run Code Online (Sandbox Code Playgroud)

  • [Illuminate\Database\QueryException] SQLSTATE[HY000]: 一般错误: 1005 无法创建表 'xxx.#sql-5d7_226' (errno: 121) (SQL: alter table `xxx` 添加约束answers_user_id_foreign 外键 (`user_id `) 在删除级联上引用 `users` (`id`)) (3认同)

Raz*_*zor 5

Laravel 模式构建器无法修改当前状态下的列,因此您将使用原始查询。您将不得不删除并重新创建约束

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);'
    );
}
Run Code Online (Sandbox Code Playgroud)

MySQL

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);'
    );
}
Run Code Online (Sandbox Code Playgroud)


Joh*_*olf 5

感谢您的提问。帮助我在 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();
    });
}
Run Code Online (Sandbox Code Playgroud)