laravel 5.8 中的嵌套替代验证 required_without

Posted

技术标签:

【中文标题】laravel 5.8 中的嵌套替代验证 required_without【英文标题】:Nested alternative validation required_without in laravel 5.8 【发布时间】:2020-09-28 21:20:21 【问题描述】:

这是我的要求


    "formulations": [
        
            "formulation_id": null,
            "formulation_custom_name": "test",
            "meal_time_id": null,
            "remark": "demo1"
        ,
        
            "formulation_id": 3,
            "formulation_custom_name": "asd",
            "meal_time_id": 2,
            "remark": "demo"
        
    ]

验证规则

'formulations.*.formulation_id' => 'required_with:formulations.*.formulation_custom_name'

为第一个对象正常工作,即当有formation_custom_name 时需要formation_id

"errors": 
    "formulations.0.formulation_id": [
        "The formulations.0.formulation_id field is required when formulations.0.formulation custom name is present."
    ]

现在我的问题与上述情况完全相反,即验证 当formulation_id 为空或不存在时需要formation_custom_name 喜欢

'formulations.*.formulation_id' => 'required_without:formulations.*.formulation_custom_name'

但这对于这样的请求不起作用


    "formulations": [
        
            "formulation_id": 6,
            "formulation_custom_name": "test",
            "meal_time_id": null,
            "remark": "demo1"
        

提前致谢

【问题讨论】:

【参考方案1】:

验证器中的required_without 规则检查字段是否存在,而不是检查empty 值或null 值。

所以你在这里需要required_if,并像下面这样使用

'formulations.*.formulation_id' => 'required_if:formulations.*.formulation_custom_name,' // it will work for blank and null

或者如果你需要更复杂的条件,那么你可以使用requiredIf自定义规则

或者如果您需要反之亦然,请写如下

'formulations.*.formulation_custom_name' => 'required_without:formulations.*.formulation_id'

Document Link

【讨论】:

以上是关于laravel 5.8 中的嵌套替代验证 required_without的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.8刀片,从嵌套对象错误中获取值

如何在 JWT API - Laravel 5.8 上验证用户群?

Laravel 5.8 验证 - 始终遵守任何规则

Laravel 5.8 验证在使用 Passport 失败后返回首页

Laravel 5.8访问错误messageBag进行数组验证

Laravel 5.8:验证多个输入