我正在尝试使用 Laravel 项目内的迁移将数据透视表的主键从“id”切换为两个值的组合。我的 up
方法如下所示,并且工作正常:
public function up() {
Schema::table('gallery_image', function (Blueprint $table) {
$table->dropColumn('id');
$table->primary(['image_id', 'gallery_id']);
});
}
但是,当我声明 down
方法以撤消上述更改时,如下所示:
public function down() {
Schema::table('gallery_image', function (Blueprint $table) {
$table->dropPrimary(['image_id', 'gallery_id']);
$table->increments('id');
});
它首先给我一个错误1068 Multiple Primary key Defined
,它告诉我down
方法中的第一行没有按预期工作,但是当我只是运行 dropPrimary
行,它给我一个错误 errno: 150 - 外键约束格式不正确
。
我不太确定我做错了什么。
最佳答案
您可以尝试以下方法
$table->dropPrimary(); // without the parameters.
或者您可以将闭包包装在 down 方法中,如下所示:
DB::statement('SET FOREIGN_KEY_CHECKS=0');
$table->dropPrimary(['image_id', 'gallery_id']);
$table->increments('id');
DB::statement('SET FOREIGN_KEY_CHECKS=1');
or
Schema::disableForeignKeyConstraints();
//code
Schema::enableForeignKeyConstraints();
这将暂时关闭 FK 检查,然后再将其重新打开。
编辑
您可以查看https://laravel.com/docs/6.0/migrations#dropping-indexes并尝试各种功能!
关于mysql - 将主键从 id 切换为数据透视表中的值组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57920715/