Laravel Excel 带条件的行验证取决于另一个字段输入

Laravel Excel Row Validation with conditions depends on another field input

我需要验证 excel 用户在 laravel 中上传的每一行,这些行已经转换为数字数组。

我想要的验证是:

  1. 确保第一个字段 (0) 不为空,
  2. 然后检查输入是否为'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'
];