【问题标题】:Laravel unique validation if ID isn't in request如果 ID 不在请求中,Laravel 唯一验证
【发布时间】:2021-03-22 14:39:45
【问题描述】:

我想对一个字段做一些验证。现在适用于唯一值,问题是在更新时我得到了同样的错误。所以我想过滤请求,如果那个帖子请求包含ID字段那么这个字段不应该是唯一的。

public function rules()
{
    return [
        'customer_id' => 'required|unique:customers',
    ];
}

【问题讨论】:

    标签: laravel validation laravel-6


    【解决方案1】:

    更新方法可以使用 Rule 类的唯一方法

    
    public function rules()
    {
        return [
            'customer_id' => [
                'required',
                Rule::unique('customers')->ignore($customer->customer_id),
        ];
    }
    

    Laravel 文档:https://laravel.com/docs/8.x/validation#rule-unique

    对于常用的 rules() 函数,可以这样做

    use Illuminate\Validation\Rule;
    
    class CustomerController extends Controller
    {
    
        protected function rules($customer)
        {
            return [
                'customer_id' => [
                    'required',
                    Rule::unique('customers')->ignore($customer->exists ? $customer->customer_id : null),
            ];
        }
    
        public function store(Request $request)
        {
            $customer = new Customer;
            $request->validate($this->rules($customer));
        }
    
        public function update(Request $request, Customer $customer)
        {
            $request->validate($this->rules($customer);
        }
    }
    

    在我的情况下,我有一个存储/更新的方法,我检查我是否有 ID。我还添加了 $customer = request()->all();和 ignore($customer['ID'] ,这是针对我的具体情况的。

    Laravel Docs 警告不要将用户控制器请求输入传递​​给忽略方法

    对于您的具体情况,您可以这样做

    $customer = !empty($request->input('ID') ? Customer::findOrFail($request->input('ID')) : new Customer;
    
    //Then pass the customer to the rules()
    $validated = $request->validate($this->rules($customer));
    

    【讨论】:

    • 在我的情况下,我有一个存储/更新的方法,我检查我是否有 ID。我还添加了 $customer = request()->all();并忽略($customer['ID'] ,这是针对我的具体情况的。谢谢!
    • @Beusebiu Docs 声明“您永远不应该将任何用户控制的请求输入传递​​给忽略方法。”已更新答案以处理您的具体案例
    猜你喜欢
    • 2023-04-06
    • 2016-08-03
    • 2019-11-11
    • 2023-03-27
    • 2020-11-12
    • 1970-01-01
    • 2018-05-24
    • 2018-07-05
    • 2020-02-18
    相关资源
    最近更新 更多