Search code examples
phpmysqllaravellaravel-5laravel-5.3

How to use unique validation for only specific record in database table in Laravel 5?


I'm trying to validate unique question for specific book_id it means is should be unique only specific record.

table: questions

$title = this is question 1

$book_id = 12

TRUE = if question not posted for $book_id = 16, user can post same question.

Display Error = if question posted for $book_id = 12, user not able to post.

This is what I tried so far

"required|unique:questions,question,book_id".$book_id,
"required|unique:questions,question,book_id,!".$book_id,
"required|unique:questions,question,NULL,id,book_id,".!$book_id,

Solution

  • You can make some custom validation like below

        class CustomValidator extends \Illuminate\Validation\Validator {
          public function ValidatecheckQuestion($attribute, $value, $parameters) {
    
            $cnt = DB::table('questions')->where('title','=',$parameters[0])
                            ->where('book_id','=',12)
                            ->count();
            if($cnt==0)
                return false;
            else
                return true;                        
         }
      }
    

    refer to https://laravel.com/docs/5.0/validation#custom-validation-rules to learn how to use custom validation exactly