簡體   English   中英

如何使用 Laravel 遷移從列中刪除唯一約束?

[英]How to remove unique constraint from a column using Laravel migrations?

我必須使用 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();
    });
}

}

但是當我運行php artisan migrate時,出現以下錯誤:

SQLSTATE[42000]:語法錯誤或訪問沖突:1061 Duplicate key name 'users_email_unique'(SQL:alter table `users` add unique `users_email_unique`(`email`))
 public function up()
 {
   Schema::table('users', function (Blueprint $table) {
    $table->string('email')->unique(false)->nullable()->change();
   });
  }

改成

$table->dropUnique('users_email_unique');

提供的解決方案工作得很好,但這里只有一個小提示:
您可以傳遞一個帶有列名稱的數組,如下所示:

$table->dropUnique(['email']); 

在這種情況下,Laravel 將根據其約定自動生成索引名稱

我在所有表上使用softDeletes時遇到了這個問題,這導致了新用戶的這種需求,一旦被邏輯刪除。

因此,我通過設置 users 表 (--table=users) 創建了遷移並刪除了約束,但隨后我重新執行了操作以滿足可能的新包含需求。

但我只是因為softDeletes而使用它,請注意您的業務規則。 我不斷驗證請求規則中的存在。

代碼如下(僅限 up 和 down 方法):

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropUnique(['email']);
    });
}


public function down()
{
    Schema::table('users', function (Blueprint $table) {
        $table->unique(['email']);
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM