Laravel 中的唯一验证取决于用户 ID

Unique validation in Laravel depending by User ID

在我的图书应用中,我对商店请求有以下规则:

'title' => 'unique:books,title|required|min:3|max:128,' . $this->user()->id.',user_id',

此刻,根据 StoreRequest 中的验证规则,我遇到了错误 "This title has already been added"(没错,但标题是由其他用户添加的,而不是由尝试添加它的用户添加的)。

我想要实现的是对标题有一个唯一的规则,但只针对这个用户collection。例如:2个不同的用户可以声明同一个书名,但同一个用户不能重复。

怎么了?

试试这个。

'title' => 'required|min:3|max:128|unique:books,title,user_id,'.Auth::user()->id,

试试这个:

'title'      => 'required|string|unique:tblbooks,id,'.$request->input('title'),
'title' => 'unique:books,user_id|required|min:3|max:128,' . $this->user()->id,

似乎可以解决问题!谢谢

试试这个

'title' => 'required|min:3|max:128|unique:books,title,NULL,id,user_id,'.Auth::user()->id,

old Laravel 5 validation documentation有例子:

'email' => 'unique:users,email_address,NULL,id,account_id,1'

Laravel 8 仍然有效。该示例检查一个唯一的 email_address,其中 account_id == 1;

current validation documentation (Laravel 8) 以这种方式显示示例:

'email' => Rule::unique('users')->where(function ($query) {
    return $query->where('account_id', 1);
})

在文档页面中搜索“添加其他 Where 子句”。