Reputation: 34914
I have 3 types of data to validate
This validation works for single data
$validator = Validator::make($request->all(), [
'tests.*.finding' => 'required',//works for single test
]);
Data sample for above
["tests"=>
[
0 => ["finding"=>""]
],
[
1 => ["finding"=>""]
]
]
And this validation works for data in group
$validator = Validator::make($request->all(), [
'tests.*.*.finding' => 'required',//works for group
]);
Data sample for above
["tests"=>
[
"A" =>[
[
0 => ["finding"=>""]
],
[
1 => ["finding"=>""]
]
],
"B" =>[
[
0 => ["finding"=>""]
],
[
1 => ["finding"=>""]
]
]
]
]
How to validate for single and data in group combined
Combined Data sample
["tests"=>
[
"A" =>[
[
0 => ["finding"=>""]
],
[
1 => ["finding"=>""]
]
]
],
[
0 => ["finding"=>""]
],
[
1 => ["finding"=>""]
]
]
Please help me to fix this, as 1st scenario always gives error for scenario second and vice versa.
Upvotes: 10
Views: 14624
Reputation: 34914
This is the solution,Laravel provided sometimes
rule to manage existence of element and then only proceed to check next rule.
So final validation rule is.
$validator = Validator::make($request->all(), [
'tests.*.*.finding' => 'sometimes|required',//works for group
'tests.*.finding' => 'sometimes|required',//works for single test
]);
Doc for this : https://laravel.com/docs/5.4/validation#conditionally-adding-rules
Upvotes: 8
Reputation: 394
You can following code to fix the validation data.
$customFieldValidation = ["test_id" => 'required|numeric',
"test_two.id" => 'required|numeric',
]);
$this->setRules ( $customFieldValidation );
$customeAttributes = [
"test_three.*.id" => 'Test Three ' // custom message
];
$this->setCustomAttributes ($customeAttributes);
$this->_validate ();
I hope it's helpful to you.
Upvotes: 2