SQLSTATE [23000]:完整性约束违规:1062 键“users_melli_unique”的重复条目“0430142821”

Posted

技术标签:

【中文标题】SQLSTATE [23000]:完整性约束违规:1062 键“users_melli_unique”的重复条目“0430142821”【英文标题】:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0430142821' for key 'users_melli_unique' 【发布时间】:2020-12-20 15:37:09 【问题描述】:

我知道之前有人问过这个问题,但我想知道如何才能停止显示这个错误,而不是这个我想在刀片中向用户显示自定义错误消息。

这是用户迁移:

public function up()

    Schema::create('users', function (Blueprint $table) 
        $table->id();
        $table->string('name');
        $table->string('image')->nullable();
        $table->string('email')->unique();
        $table->boolean('is_superuser')->default(0);
        $table->boolean('is_staff')->default(0);
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->string('phone_number')->nullable()->unique();
        $table->enum('two_factor_type', ['off', 'sms']);
        $table->string('melli')->nullable()->unique();
        $table->rememberToken();
        $table->timestamps();
    );

更新: 这是我的插入功能:

$user = User::find(auth()->user()->id);
$request->validate([
    'melli' => 'min:10|max:10',
    'cart' => 'min:16|max:16'
]);;
$user->update([
    'name' => $request['name'],
    'cart' => $request['cart'],
    'melli' => $request['melli'],
    'gender' => $request['gender']
]);
return redirect(route('profile.index'));

当我的数据库中有一个像 1234567890 这样的 melli 并且我尝试再次写入 1234567890 时会发生此错误,因为 melli 字段是唯一的。

【问题讨论】:

您没有显示插入查询,但我建议使用 try/catch 块,或者在插入之前查找现有的 Melli 字符串。 通常您会在验证期间处理此类状态,并将自定义消息返回给刀片。如果您想自己处理它,那么正如@aynber 所建议的那样,捕获异常并将您自己的消息返回给 plade 问题已更新 在 melli 字段中使用 unique 验证。 laravel.com/docs/7.x/validation#rule-unique 也检查这个以处理更新***.com/a/48492198/12459934 谢谢大家的回答很有帮助 【参考方案1】:

您需要unique 验证规则并忽略更新中的id

你可以这样做:

$request->validate([
   'melli' => 'min:10|max:10|unique:users,melli,' .$user->id,
]);

或者

$request->validate([
    'melli' => [
        'min:10',
        'max:10',
        Rule::unique('users')->ignore($user->id, 'id')
    ],
    'cart' => 'min:16|max:16'
]);

我认为这就是你所需要的。

还有一些helpful answer。

【讨论】:

以上是关于SQLSTATE [23000]:完整性约束违规:1062 键“users_melli_unique”的重复条目“0430142821”的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE[23000]:完整性约束违规 1452 无法添加或更新子行:外键约束失败

Innobyte 插件问题:SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行

SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败

Laravel:正确保存后返回重定向抛出 SQLSTATE [23000]:完整性约束违规

SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败 - Laravel

Laravel 7 错误 - SQLSTATE [23000]:完整性约束违规:1048 列 'first_name' 不能为空