我有一个表迁移,我尝试强制将 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 | |
+-------------------+---------------------+------+-----+---------+----------------+
答案 0 :(得分:0)
试试这个:
而不是这两个:
最后运行这个命令:
希望你能得到你想要的结果。