我必须使用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重复键名'users_email_unique'(SQL:alter table`users`添加唯一`users_email_unique`(`email`))
答案 0 :(得分:3)
提供的解决方案工作正常,但这里只有一个小技巧:
您可以像这样传递一个带有列名的数组:
$table->dropUnique(['email']);
在这种情况下,Laravel 将根据其约定自动生成索引名称
答案 1 :(得分:2)
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('email')->unique(false)->nullable()->change();
});
}
更改为
$table->dropUnique('users_email_unique');
答案 2 :(得分:0)
我认为您可以删除列
并使用以下命令重新创建:
请注意,它将删除您电子邮件列中的值
if (Schema::hasColumn('users', 'email'))
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('email');
});
}
Schema::table('users', function (Blueprint $table) {
$table->string('email')->nullable();
});