如何使用 Laravel 迁移从列中删除唯一约束?

ais*_*far 10 database-migration laravel laravel-5.5 laravel-5.6

我必须使用 Laravel 迁移从电子邮件列中删除唯一约束。这是我的代码:

class AlterEmailToUsers extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->string('email')->unique(false)->nullable()->change();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('users', function (Blueprint $table) {
       $table->string('email')->nullable(false)->unique()->change();
    });
}
Run Code Online (Sandbox Code Playgroud)

}

但是当我运行时php artisan migrate,出现以下错误:

SQLSTATE[42000]:语法错误或访问冲突:1061 重复键名“users_email_unique”(SQL:alter table `users` add unique `users_email_unique`(`email`))

Kul*_*hra 15

 public function up()
 {
   Schema::table('users', function (Blueprint $table) {
    $table->string('email')->unique(false)->nullable()->change();
   });
  }
Run Code Online (Sandbox Code Playgroud)

改成

$table->dropUnique('users_email_unique');
Run Code Online (Sandbox Code Playgroud)


4un*_*kur 6

提供的解决方案工作得很好,但这里只有一个小技巧:
您可以像这样传递一个带有列名的数组:

$table->dropUnique(['email']); 
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Laravel 将根据其约定自动生成索引名称