Laravel 迁移唯一仍然允许相同的条目

时间:2021-01-21 06:03:11

标签: php laravel

我有一个表迁移,我尝试强制将 phone_number 字段验证为唯一:

Schema::create('users', function (Blueprint $table) {
  $table->id();
  $table->string('phone_number');
  $table->string('email')->nullable();
  $table->timestamp('email_verified_at')->nullable();
  $table->string('password');
  $table->string('user_type')->nullable();
  $table->boolean('is_admin');
  $table->rememberToken();
  $table->timestamps();

  $table->unique('phone_number');
});

但是,当我尝试使用相同的电话号码(例如“27841231234”)创建两个用户时,它仍然允许它,并且只是为这些用户分配了两个不同的 ID... 我是否错误地理解了独特的功能?以及如何强制 laravel 不允许存储两个相似的电话号码?

编辑:

这是我的 MYSQL 数据库结构,这也表明该字段被选择为唯一的,但仍然允许重复值:

| Field             | Type                | Null | Key | Default | Extra          |
+-------------------+---------------------+------+-----+---------+----------------+
| id                | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| phone_number      | varchar(255)        | NO   | UNI | NULL    |                |
| email             | varchar(255)        | YES  |     | NULL    |                |
| email_verified_at | timestamp           | YES  |     | NULL    |                |
| password          | varchar(255)        | NO   |     | NULL    |                |
| user_type         | varchar(255)        | YES  |     | NULL    |                |
| is_admin          | tinyint(1)          | NO   |     | NULL    |                |
| remember_token    | varchar(100)        | YES  |     | NULL    |                |
| created_at        | timestamp           | YES  |     | NULL    |                |
| updated_at        | timestamp           | YES  |     | NULL    |                |
+-------------------+---------------------+------+-----+---------+----------------+

1 个答案:

答案 0 :(得分:0)

试试这个:

  • $table->string('phone_number')->unique();

而不是这两个:

  • $table->string('phone_number');
  • $table->unique('phone_number');

最后运行这个命令:

  • php artisan 迁移

希望你能得到你想要的结果。

相关问题