我正在尝试将社交登录与我现有的laravel应用集成。我试图将电子邮件和密码更改为可为空,但我还需要电子邮件以保持唯一性。执行迁移时,我收到重复的键名“ users_email_unique”的错误
Laravel 5已经解决了我更改列所用的枚举的问题。
Schema::table('users', function (Blueprint $table) {
$table->string('email')->unique()->nullable()->change();
$table->string('password')->nullable()->change();
});
Illuminate \ Database \ QueryException:SQLSTATE [42000]:语法错误或访问冲突:1061重复的键名'users_email_unique'(SQL:alter table users
添加唯一的users_email_unique
(email
))
异常跟踪:
1 Doctrine \ DBAL \ Driver \ PDOException::(“” SQLSTATE [42000]:语法错误或访问冲突:1061重复的键名'users_email_unique'“)
/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:119
2 PDOException::(“ SQLSTATE [42000]:语法错误或访问冲突:1061重复的键名'users_email_unique'”)
/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:117
修改
如果我从电子邮件中删除Unique(),由于先前在其他迁移中设置了唯一性,它将保持唯一性吗?
答案 0 :(得分:1)
听起来数据库正在检测重复值。对于null来说这是不可能的,因此它可能是一个空字符串。
在这种情况下,您可以在模型中编写一个mutator函数,以检查该值是否为空,并在将其用于数据库引擎之前将其设置为null,如下所示:
public function setNameOfYourAttribute($value) {
if ( empty($value) ) {
$this->attributes['nameofyourattribute'] = NULL;
}
}
希望有帮助。
答案 1 :(得分:0)
我自己弄清楚了,如上述答案的评论中所述。
这是因为如果删除该表已经使用unique()创建了表,它将允许迁移,并且还将保留原始User表迁移中的unique()功能。