Home > Mobile >  Laravel Excel Row Validation with conditions depends on another field input
Laravel Excel Row Validation with conditions depends on another field input

Time:01-21

I need to validate every rows from excel user upload in laravel which already converted to numeric array.

The validation i wanted is :

  1. to make sure that the 1st field (0) is not blank,
  2. then check whether the input is 'PRODUCTION-PROJECT' or not, if yes, then the 2nd field is required (1).

how to achieve this ?

My Controller Import 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();

The array looks like this :

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
  ],
];

The validation i've tried so far like so :

$validatedData = Validator::make($array, [
    '*.0' => 'required',
    '*.1' => Rule::requiredIf('*.0' === 'PRODUCTION-PROJECT')
];

and the validation didn't show any error

CodePudding user response:

The params of Rule::requiredIf should be a callback function that you need to custom the rule and input.

It's better to change Rule::requiredIf('*.0' === 'PRODUCTION-PROJECT') to 'required_if:*.0,PRODUCTION-PROJECT"'

so the correct code is :

$validatedData = Validator::make($array, [
    '*.0' => 'required',
    '*.1' => 'required_if:*.0,PRODUCTION-PROJECT'
];
  •  Tags:  
  • Related