Ruchita Sheth
Ruchita Sheth

Reputation: 860

Laravel validation: require any of two field if another field is available

I have 4 fields in request id, CID, PID, item_number

where

"CID":40,
"PID": 1210111037
'id' => 'required_without:CID|integer',
'CID' => 'required_without:id|integer',
'PID' => 'required_with:CID|integer',
'item_number' => 'required_with:CID|integer',
'id' => 'required_without:CID|integer',
'CID' => 'required_without:id|integer',
'PID' => 'required_without:item_number|required_with:CID|integer',
'item_number' => 'required_without:PID|required_with:CID|integer',

the above both throws an error The item_number is required when Customer id is present.

Upvotes: 2

Views: 1589

Answers (2)

Shadab Khan
Shadab Khan

Reputation: 29

You can check laravel required_if validation rule

'id' => 'required_without:CID|integer',
'CID' => 'required_if:id,==,""|integer',
'PID' => 'required_if:CID,!=,""|integer',
'item_number' => 'required_if:PID,==,""|integer'

Upvotes: 1

Niklesh Raut
Niklesh Raut

Reputation: 34914

You can check Validation rule 'required_without_all'

'id' => 'required_without:CID|integer',
'CID' => 'required_without:id|integer',
'PID' => 'required_without_all:id,item_number|integer',
'item_number' => 'required_without_all:id,PID|integer'

You can also create dynamic rule array.

$rules = [
       'id' => 'required_without:CID|integer',
       'CID' => 'required_without:id|integer'
      ];
if($request->CID ?? false){
      if($request->PID || $request->$request->item_number){ // I assume both are exist not will not be undefined.
         $rules['PID'] = 'integer';
         $rules['item_number'] = 'integer';
      }else{
         $rules['PID'] = 'required_with:CID|integer';
         $rules['item_number'] = 'required_with:CID|integer';
      }
}

Upvotes: 3

Related Questions