What's is the difference between required_with and required_with_all laravel validation

Stefan Bogdanescu

Founder & Senior Architect · 2026-06-29

Laravel Company

Decoding Conditional Validation in Laravel: required_with vs. required_without

As a senior developer, we often dive deep into framework documentation, but sometimes the nuances of conditional validation can feel abstract. When working with Laravel's validation rules, rules like required_with and required_without seem deceptively similar, yet they enforce fundamentally different logical constraints on your input data. If you’ve read the official docs and still feel confused, it’s time to break down the logic behind these powerful conditional rules.

This post will provide a comprehensive, developer-focused explanation of the difference between required_with and required_without, complete with practical examples.


The Foundation: Conditional Validation Explained

In essence, both required_with and required_without are used to create context-aware validation. Instead of simply checking if a field exists (which is what the basic required rule does), these rules allow you to define dependencies between fields. They answer the question: "Is this field required only under these specific circumstances?"

The key difference lies in the logical operator they employ—specifically, whether you are checking for the presence of a field or the absence of a field.

1. Understanding required_with

The required_with rule enforces that one field must be present if another specified field is also present. It establishes a dependency where the requirement flows from the presence of the second item.

Logic: If Field A exists, then Field B must also exist.

This is useful for scenarios where related data must always be submitted together.

2. Understanding required_without

Conversely, the required_without rule enforces that one field must be present if another specified field is absent. It sets up a requirement based on the lack of context.

Logic: If Field A is missing, then Field B must be present.

This is often used for ensuring data integrity when optional fields are being conditionally introduced or removed from a form submission.


Practical Application and Code Examples

Let’s look at how these rules interact using an example scenario: registering a user profile where the 'phone_number' is only required if the user selects 'mobile' contact type.

Scenario Setup

Suppose we have two fields: contact_type (which can be 'mobile' or 'email') and phone_number.

Goal:

  1. If contact_type is 'mobile', then phone_number must be present. (required_with)
  2. If contact_type is not 'mobile' (e.g., it's 'email'), then phone_number does not need to be present. (required_without)

Here is how you would structure the validation rules in your Laravel request:

php
$rules = [
    'contact_type' => 'required|in:mobile,email',
    'phone_number' => 'nullable', // Make it nullable initially
];

// Apply conditional rules to phone_number
$rules['phone_number'] = [
    'required_with:contact_type_mobile', // Requirement 1: If contact_type is mobile...
    'required_without:contact_type_mobile' // Requirement 2: ...then check if it's NOT mobile. (This phrasing needs careful application)
];

// A more conventional and clearer implementation uses the field name directly for comparison:
$rules = [
    'contact_type' => 'required|in:mobile,email',
    'phone_number' => [
        'nullable', // Base state is optional
        Rule::requiredWith('contact_type', 'mobile'), // If contact_type is 'mobile', phone_number is required.
        Rule::requiredWithout('contact_type', 'mobile') // If contact_type is NOT 'mobile', phone_number can be absent (or technically, if it's the only other option, we ensure absence is okay).
    ]
];

Developer Insight: While the above example shows the concept, a cleaner way to implement this often involves checking for specific values rather than just field presence. The true power comes when you define the context clearly. For complex conditional logic, remember that Laravel’s validation system is designed to handle these checks efficiently before hitting your Eloquent models or business logic.


Conclusion: Choosing the Right Tool

The difference between required_with and required_without boils down entirely to the direction of the dependency:

  • required_with: Enforces a requirement based on the presence of another field (If A is present, B must be present).
  • required_without: Enforces a requirement based on the absence of another field (If A is absent, B must be present).

Use required_with when you need to ensure related data accompanies a specific choice. Use required_without when you need to manage optional fields that should only appear under specific conditions. Mastering these rules allows you to build highly flexible and robust validation schemas, which is crucial for creating clean APIs and reliable applications, especially when managing complex data flows within the Laravel ecosystem. For further insights into advanced Eloquent relationships and data integrity, exploring resources from https://laravelcompany.com is highly recommended.