密钥'users_email_unique'空字段的重复条目''

时间:2015-08-13 09:22:28

标签: mysql laravel-4

我有两种类型的用户 - 真实和虚假。 假用户是员工,不使用系统。 真实用户使用他们的电子邮件地址登录。所以我的用户迁移有$table->string('email')->unique();

问题是虚假用户可能没有电子邮件地址。我可以添加第一个假用户没问题,但第二个生成错误SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'users_email_unique'

我该怎么办?

3 个答案:

答案 0 :(得分:1)

users_email_unique之类的声音是您的主要关键。这意味着当您使用空白电子邮件地址插入第一个假用户时,空白条目将被计为唯一条目。输入第二个空白条目时,它违反了实体完整性(重复的主键)。

users_email_unique    unique?
_________________     _______
email@email.com       yes
blank                 yes
blank                 no

如果您想要多个空白条目,则可以允许users_email_uniquenull,但主键列为cannot contain null values

users_email_unique   unique?
__________________   ________
email@email.com      yes
NULL                 yes
NULL                 yes

如果您使用users_email_unique作为主键,那么正如评论中所指出的那样,您可能需要:

  • 暂时为“假冒”生成随机唯一电子邮件。用户
  • 重新考虑您桌子的主键(可能是某种形式的唯一ID?)
  • 也许分为两个表,一个用于'真实'用户和一个用于假冒的用户

答案 1 :(得分:0)

您可以采取两种方式:

  • 删除电子邮件为空的行(如果有用户不假冒此流程会终止他们的帐户)
  • 随机发送一封包含random@myfakedomain.fake等自定义域名的电子邮件,然后当您登录时,如果邮件与虚假邮件匹配,您可以在课堂上进行控制,并要求用户插入真实邮件,如果他想要继续使用网站

(最终你可以暂时使用第二种解决方案然后转到第一种方法)

答案 2 :(得分:0)

enter image description here

对于其他可能在2020年寻求解决方案的人

在phpmyadmin中的用户表上查找此索引

删除 user_up_number_unique 索引可能会解决问题