Laravel 验证:使用 laravel required and if exists together
Laravel Validation: use laravel required and if exists together
我有以下验证要求。
if inventory_purchase_bill == True, lines..sku 应该是
required|exists:items,sku 如果 inventory_purchase_bill == False,
lines..sku 应该可以为 null|exists:items,sku
基本上只在存在值时测试exists。如果没有值或为空,则不检查是否存在。
尝试跟随,但二线优先。如何实现?
$validation = $this->validate($request, [
'inventory_purchase_bill' => 'required',
'lines.*.sku' => 'exclude_unless:inventory_purchase_bill,false|nullable|exists:items,sku',
'lines.*.sku' => 'exclude_unless:inventory_purchase_bill,true|required|exists:items,sku',
]);
'lines.*.sku' => function($attribute, $value, $fail) use ($request) {
if ($request->bill_type == 'Stock Purchase') {
if($value !=null && $value != ''){
$item = Item::where('sku',$value)->first();
if($item == null){
return $fail($value.' not in database. Please add new item.');
}
}else{
return $fail('SKU is required.');
}
}
if ($request->bill_type == 'Expense') {
if($value !=null && $value != ''){
$item = Item::where('sku',$value)->first();
if($item == null){
return $fail($value.' not in database. Please add new item.');
}
}
}
},
我有以下验证要求。
if inventory_purchase_bill == True, lines..sku 应该是 required|exists:items,sku 如果 inventory_purchase_bill == False, lines..sku 应该可以为 null|exists:items,sku
基本上只在存在值时测试exists。如果没有值或为空,则不检查是否存在。
尝试跟随,但二线优先。如何实现?
$validation = $this->validate($request, [
'inventory_purchase_bill' => 'required',
'lines.*.sku' => 'exclude_unless:inventory_purchase_bill,false|nullable|exists:items,sku',
'lines.*.sku' => 'exclude_unless:inventory_purchase_bill,true|required|exists:items,sku',
]);
'lines.*.sku' => function($attribute, $value, $fail) use ($request) {
if ($request->bill_type == 'Stock Purchase') {
if($value !=null && $value != ''){
$item = Item::where('sku',$value)->first();
if($item == null){
return $fail($value.' not in database. Please add new item.');
}
}else{
return $fail('SKU is required.');
}
}
if ($request->bill_type == 'Expense') {
if($value !=null && $value != ''){
$item = Item::where('sku',$value)->first();
if($item == null){
return $fail($value.' not in database. Please add new item.');
}
}
}
},