Php 加上「;“关于删除级联”;至Laravel中的现有柱
我的表中有user_id fk列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无法在当前状态下修
$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您只是删除外键定义。您不会丢失任何数据。