You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中email_customer字段POST/PATCH唯一验证异常修复咨询

修复Laravel客户邮箱验证的两个问题

问题根源

  1. POST新增请求:你给唯一验证加了ignore($this->id),但新增场景下根本不存在id参数,这会让验证规则忽略一个不存在的记录,等于直接跳过了邮箱唯一性校验,所以重复邮箱能被插入。
  2. PATCH更新请求:$this->id无法正确获取当前要更新的客户ID,导致验证时把当前记录也判定为重复项,保留原邮箱时触发错误。

修复后的代码

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class CustomerRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return match ($this->method()) {
            'POST' => [
                'email_customer' => ['required', 'max:50', 'email', Rule::unique('customers', 'email_customer')],
            ],
            'PATCH' => [
                'email_customer' => [
                    'required', 
                    'max:50', 
                    'email', 
                    Rule::unique('customers', 'email_customer')->ignore($this->route('customer')->id)
                ],
            ],
        };
    } 
}

关键改动说明

  • POST场景:移除ignore()方法,确保新增时邮箱必须在customers表中唯一。
  • PATCH场景:用$this->route('customer')->id获取路由中传递的客户模型ID(假设你的更新路由参数是customer,比如Route::patch('/customers/{customer}', ...)),这样验证规则会忽略当前要更新的记录,当用户保留原邮箱时不会触发唯一性错误,只有当输入新邮箱和其他现有记录重复时才会报错。

如果你的路由参数不是customer,比如用的是id,就改成$this->route('id')即可。

内容的提问来源于stack exchange,提问作者Cobit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:15:44