Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Rahzun's avatar

Validation for roll number unique to each semester

Here's validator for registering new users (students), 'users' is provider for 'User' model. 'roll' is unique for every users but I want it to be unique only to users of each semester. Code :

protected function validator(array $data) { return Validator::make($data, [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users|unique:admins|unique:teachers', 'password' => 'required|min:6|confirmed', 'roll' => 'required|integer|min:0|unique:users', 'semester' => 'required', ]); }

0 likes
1 reply
danmatthews's avatar

Since the value of semester is required, you could add a custom validation rule:

https://laravel.com/docs/5.4/validation#custom-validation-rules

Maybe call it unique_to_semester ? then your rules would look like:

return Validator::make($data, [
  'name' => 'required|max:255',
  'email' => 'required|email|max:255|unique:users|unique:admins|unique:teachers', 
  'password' => 'required|min:6|confirmed',
  'roll' => 'required|integer|min:0|unique:users|unique_to_semester',
  'semester' => 'required'
]);

I think you can use the request() function inside the extend callback to get information from any input - but i'm not 100%, sorry!

Validator::extend('foo', function ($attribute, $value, $parameters, $validator) {
  // If semester isn't set, this rule isn't valid.
  if (empty(request('semester')) {
    return false;
  }

  // Check that the "roll" ($value) is unique only to that semester.
// return true if it passes the test
// return false if it doesn't
});

Please or to participate in this conversation.