Laravel Excel 带条件的行验证取决于另一个字段输入
Laravel Excel Row Validation with conditions depends on another field input
我需要验证 excel 用户在 laravel 中上传的每一行,这些行已经转换为数字数组。
我想要的验证是:
- 确保第一个字段 (0) 不为空,
- 然后检查输入是否为'PRODUCTION-PROJECT',如果是,则第二个字段为必填项(1).
如何实现?
我的控制器导入class
$file = $request->file('file');
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setLoadSheetsOnly(['Upload']);
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($file->getRealPath());
$sheet = $spreadsheet->getActiveSheet();
$array = $sheet->toArray();
数组如下所示:
array:8 [
0 => array:11 [
0 => "PRODUCTION-PROJECT"
1 => "Consumable equipment expenses"
2 => "2022-07"
3 => "2022-08"
4 => "Forstr"
5 => "DOMESTIC"
6 => "ABCDE"
7 => "IDR"
8 => 2000
9 => 1
10 => "Enim temporibus est quis."
],
1 => array:11 [
0 => "PRODUCTION-PROJECT"
1 => null
2 => "2022-08"
3 => "2022-08"
4 => "RX"
5 => "DOMESTIC"
6 => "FGHIJ"
7 => "USD"
8 => 2000
9 => 1
10 => null
],
];
到目前为止我已经尝试过的验证是这样的:
$validatedData = Validator::make($array, [
'*.0' => 'required',
'*.1' => Rule::requiredIf('*.0' === 'PRODUCTION-PROJECT')
];
并且验证没有显示任何错误
Rule::requiredIf
的参数应该是一个回调函数,你需要自定义规则和输入。
最好把Rule::requiredIf('*.0' === 'PRODUCTION-PROJECT')
改成'required_if:*.0,PRODUCTION-PROJECT"'
所以正确的代码是:
$validatedData = Validator::make($array, [
'*.0' => 'required',
'*.1' => 'required_if:*.0,PRODUCTION-PROJECT'
];
我需要验证 excel 用户在 laravel 中上传的每一行,这些行已经转换为数字数组。
我想要的验证是:
- 确保第一个字段 (0) 不为空,
- 然后检查输入是否为'PRODUCTION-PROJECT',如果是,则第二个字段为必填项(1).
如何实现?
我的控制器导入class
$file = $request->file('file');
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setLoadSheetsOnly(['Upload']);
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($file->getRealPath());
$sheet = $spreadsheet->getActiveSheet();
$array = $sheet->toArray();
数组如下所示:
array:8 [
0 => array:11 [
0 => "PRODUCTION-PROJECT"
1 => "Consumable equipment expenses"
2 => "2022-07"
3 => "2022-08"
4 => "Forstr"
5 => "DOMESTIC"
6 => "ABCDE"
7 => "IDR"
8 => 2000
9 => 1
10 => "Enim temporibus est quis."
],
1 => array:11 [
0 => "PRODUCTION-PROJECT"
1 => null
2 => "2022-08"
3 => "2022-08"
4 => "RX"
5 => "DOMESTIC"
6 => "FGHIJ"
7 => "USD"
8 => 2000
9 => 1
10 => null
],
];
到目前为止我已经尝试过的验证是这样的:
$validatedData = Validator::make($array, [
'*.0' => 'required',
'*.1' => Rule::requiredIf('*.0' === 'PRODUCTION-PROJECT')
];
并且验证没有显示任何错误
Rule::requiredIf
的参数应该是一个回调函数,你需要自定义规则和输入。
最好把Rule::requiredIf('*.0' === 'PRODUCTION-PROJECT')
改成'required_if:*.0,PRODUCTION-PROJECT"'
所以正确的代码是:
$validatedData = Validator::make($array, [
'*.0' => 'required',
'*.1' => 'required_if:*.0,PRODUCTION-PROJECT'
];