如何仅对Laravel 5中数据库表中的特定记录使用唯一验证?

时间:2017-02-28 04:15:39

标签: php mysql laravel laravel-5 laravel-5.3

我试图验证特定book_id的唯一问题 它意味着应该是唯一的唯一特定记录。

table: questions

$title = this is question 1

$book_id = 12

TRUE =如果question未发布$book_id = 16,则用户可以发布相同的question

显示错误 =如果为question发布了$book_id = 12,则用户无法发帖。

这是我到目前为止所尝试的

"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,

3 个答案:

答案 0 :(得分:1)

尝试此规则:

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

答案 1 :(得分:0)

您可以进行一些自定义验证,如下所示

    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;                        
     }
  }

参考https://laravel.com/docs/5.0/validation#custom-validation-rules了解如何准确使用自定义验证

答案 2 :(得分:-1)

您希望在创建过程中将标题与数据库中questions表中的其他标题进行比较,如下所示:

'title' => 'unique:questions,title'