[Vuejs]-Check dynamic variable of an array contains value or not in php

1👍

You should validate your request:

$request->validate([
    'addresses' => ['required', 'array'],
    'addresses.*.street1' => ['required', 'string'],
    'addresses.*.state_id' => ['required', 'numeric'],
    'addresses.*.country_id' => ['required', 'numeric'],
]);

1👍

If I understand it right

  • User can fill up just name & submit the form – data should be persisted in the database
  • User can fill up multiple address, but if user doesn’t fill up complete details (street, state & country should be filled) for the address it should not be persisted in the database

One approach would be to

  • validate the address data, ONLY if user added address to the form
  • and return validation error if street1, state_id or country_id is null
public function store(Request $request)
{
    //return $request->all();

    $validated = $request->validate([
        'name' => ['required', 'string'],
        'addresses' => ['sometimes', 'array'],
        'addresses.*.street1' => ['sometimes', 'required', 'string'],
        'addresses.*.state_id' => ['sometimes', 'required', 'numeric'],
        'addresses.*.country_id' => ['sometimes', 'required', 'numeric'],
    ]);

    //The above will pass validation if name is filled as non empty string & addresses is not present in the request data
    //But if the addresses is present in the request, it will fail if either of  street1, state_id or country_id is null

    $contact = Contacts::create([
        'name' => $request->name,
        'company_id' => Auth::user()->company_id,
    ]);

    $addresses= json_decode($request->addresses, true);
    //return $addresses;
    //[{"street1":"","state_id":"","country_id":""}]
    if (! empty($addresses)) {
        foreach($addresses as $ad) {
            $address = new Address;
            $address->contact_id = $contact->id;
            $address->street1 = $ad['street1'];
            $address->state_id = $ad['state_id'];
            $address->country_id = $ad['country_id'];
            $address->save();
        } 
    }

    //return response
}

Laravel Docs – Validation – Validating When Present

Leave a comment