[英]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.