How to check if a user email already exists in Laravel?

In Laravel, checking if a user email already exists is a common requirement for registration, validation, and duplicate prevention. Laravel provides multiple approaches to accomplish this task efficiently.

Before running these examples, ensure you have a Laravel project set up with a User model and database connection configured.

Using Laravel Validator

The Validator class provides a clean way to check email uniqueness using Laravel's builtin validation rules ?

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class UserController extends Controller {
   public function index() {
      $inputValues['email'] = "heena@gmail.com";
      
      // checking if email exists in 'email' column in the 'users' table
      $rules = array('email' => 'unique:users,email');
      
      $validator = Validator::make($inputValues, $rules);
      
      if ($validator->fails()) {
         echo 'The email already exists';
      } else {
         echo 'The email is not registered';
      }
   }
}

The output of the above code is

The email already exists

Now let us try with an email which is not present inside the users table ?

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class UserController extends Controller {
   public function index() {
      $inputValues['email'] = "test@gmail.com";
      
      // checking if email exists in 'email' column in the 'users' table
      $rules = array('email' => 'unique:users,email');
      $validator = Validator::make($inputValues, $rules);
      
      if ($validator->fails()) {
         echo 'The email already exists';
      } else {
         echo 'The email is not registered';
      }
   }
}

The output of the above code is

The email is not registered

Using Eloquent where() and first()

You can use Eloquent model to directly query the database and check if email exists ?

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;

class UserController extends Controller {
   public function index() {
      $email = "heena@gmail.com";
      $userEmailDetails = User::where('email', '=', $email)->first();
      
      if ($userEmailDetails === null) {
         echo 'The email is not registered';
      } else {
         echo 'The email already exists';
      }
   }
}

The output of the above code is

The email already exists

Using count() Method

The count() method returns the number of records matching the query ?

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;

class UserController extends Controller {
   public function index() {
      $email = "heena@gmail.com";
      
      if (User::where('email', '=', $email)->count() > 0) {
         echo "Email Exists";
      } else {
         echo "Email is not registered";
      }
   }
}

The output of the above code is

Email Exists

Using exists() Method

The exists() method is more efficient as it returns a boolean without fetching actual data ?

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;

class UserController extends Controller {
   public function index() {
      $email = "heena@gmail.com";
      
      if (User::where('email', '=', $email)->exists()) {
         echo "Email Exists";
      } else {
         echo "Email is not registered";
      }
   }
}

The output of the above code is

Email Exists

Comparison

Method Use Case Performance
Validator Form validation Good
first() Need user data Moderate
count() Count records Moderate
exists() Simple existence check Best

Conclusion

Use Validator for form validation scenarios, exists() for simple checks, and first() when you need the actual user data. The exists() method is most efficient for pure existence checks.

Updated on: 2026-03-15T10:10:16+05:30

5K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements