Navigation

Laravel

How to Validate a Nested Array in a Laravel API Request

Validate complex nested array structures in Laravel API requests using dot notation and wildcard rules for reliable data validation.

Table Of Contents

Problem

Your API receives nested arrays (like products with variants, or users with multiple addresses) and you need to validate each element properly.

Solution

Use Laravel's dot notation and wildcard (*) syntax in Form Requests:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class CreateOrderRequest extends FormRequest
{
    public function rules()
    {
        return [
            'customer_email' => 'required|email',
            'items' => 'required|array|min:1',
            'items.*.product_id' => 'required|exists:products,id',
            'items.*.quantity' => 'required|integer|min:1',
            'items.*.options' => 'sometimes|array',
            'items.*.options.*.name' => 'required_with:items.*.options|string',
            'items.*.options.*.value' => 'required_with:items.*.options|string',
            'shipping.address' => 'required|string',
            'shipping.city' => 'required|string',
            'shipping.postal_code' => 'required|regex:/^[0-9]{5}$/',
        ];
    }
}

For inline validation:

$validated = $request->validate([
    'users' => 'required|array',
    'users.*.name' => 'required|string|max:255',
    'users.*.emails' => 'required|array',
    'users.*.emails.*' => 'required|email|distinct',
]);

Why It Works

Laravel's validation engine uses dot notation to traverse nested structures. The * wildcard matches any array index, allowing validation of each array element. You can combine wildcards at multiple levels for deeply nested structures.

Custom error messages for nested fields:

public function messages()
{
    return [
        'items.*.quantity.min' => 'Each item must have at least 1 quantity',
        'users.*.emails.*.email' => 'All user emails must be valid',
    ];
}

Related: Laravel Collections: Beyond Basic Array Operations | Laravel Events and Listeners: Building Decoupled Applications | Laravel API Development: Best Practices and Security | Level Up Your Laravel Validation: Advanced Tips & Tricks | Custom Laravel Validation Rules: Beyond the Basics

Share this article

Add Comment

No comments yet. Be the first to comment!

More from Laravel