【发布时间】:2020-01-11 23:11:22
【问题描述】:
我有很多迁移,通常使用“php artisan migrate:refresh”,一切都很好。
由于唯一列的重复条目,我第一次在回滚时遇到错误:
SQLSTATE[23000]:完整性约束违规:1062 键“objects_key_unique”的重复条目“记录”(SQL:alter table `objects` add unique `objects_key_unique`(`key`))
起初该列是唯一的,但在后来的迁移中,我删除了该约束,现在我的数据库中有重复的条目。
由于再次设置了唯一约束的down函数,当我回滚时迁移会引发错误。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class EditObjectTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('objects', function (Blueprint $table) {
$table->dropUnique(['key']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('objects', function (Blueprint $table) {
$table->unique(['key']);
});
}
}
我该如何处理? 我不希望该列具有唯一约束,但我也希望回滚而不会出错。 在“EditObjectTable”之后不久,该表在另一个迁移中被删除,所以我在回滚时不需要数据。
【问题讨论】:
-
还在
down函数中添加$table->dropUnique(['key']); -
我认为迁移背后的含义是 up 和 down 函数的作用完全相反。在我的情况下,该表将被删除并且它可能会起作用,但在其他情况下,我的和 createTable 之间可能会有另一次迁移,它假定设置了唯一约束。
-
您的情况很特殊,我认为您需要删除 down 函数中的唯一约束
标签: php mysql laravel laravel-migrations