我user_ID的FK列在我的表添加 “ON DELETE CASCADE” 到现有列在Laravel
$table->foreign('user_id')->references('id')->on('users');
我要补充在级联删除功能,这个现有列。我怎样才能做到这一点?
我user_ID的FK列在我的表添加 “ON DELETE CASCADE” 到现有列在Laravel
$table->foreign('user_id')->references('id')->on('users');
我要补充在级联删除功能,这个现有列。我怎样才能做到这一点?
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
[Illuminate \ Database \ QueryException] SQLSTATE [HY000]:General error:1005无法创建表'xxx。#sql-5d7_226'(errno:121)(SQL:alter table 'xxx'添加约束answers_user_id_foreign外键('user_id ')在删除级联时引用'users'('id') – 2014-11-08 23:16:33
对现有列不起作用 – 2014-11-08 23:20:25
那么也许你应该报告它是一个bug,因为那是官方[记录的方法](http://laravel.com/docs/4.2/schema#foreign-keys) – 2014-11-09 00:09:06
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);'
);
}
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);'
);
}
$table->integer('user_id')->unsigned();
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
我假设你使用Illuminate\Database\Schema\Blueprint::primary()
创建users.id
。如果是这种情况,则users.id
将被无符号。因此,您的外键列user_id
也必须是未签名的。
感谢您的回答。帮助我在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();
});
}
使用原始查询'DB :: statement('..')'。你的桌子的名字是什么? – Razor 2014-11-08 23:23:00
表的名称是“答案” – 2014-11-08 23:24:44