Laravel 5唯一表单验证忽略id/slug

Har*_*ist 4 php rules unique slug laravel-5

这些是我班上的规则:

class AppointmentsController extends Controller
{
    protected $rules = [
        'appointment' => ['required', 'min:5'],
        'slug'        => ['required', 'unique:appointments'],
        'description' => ['required'],
        'date'        => ['required', 'date_format:"Y-m-d H:i"'],
    ];
Run Code Online (Sandbox Code Playgroud)

这是laravel官方文档:

有时,您可能希望在唯一检查期间忽略给定的ID.例如,考虑一个"更新配置文件"屏幕,其中包括用户的名称,电子邮件地址和位置.当然,您需要验证电子邮件地址是否唯一.但是,如果用户仅更改名称字段而不更改电子邮件字段,则不希望抛出验证错误,因为用户已经是电子邮件地址的所有者.如果用户提供已由其他用户使用的电子邮件地址,您只想抛出验证错误.要告诉唯一规则忽略用户的ID,您可以将ID作为第三个参数传递:

'email' => 'unique:users,email_address,'.$user->id.',user_id'
Run Code Online (Sandbox Code Playgroud)

我尝试在我的规则中使用它:

'slug'        => ['required', 'unique:appointments,id,:id'],
Run Code Online (Sandbox Code Playgroud)

这确实忽略了当前行,但它完全忽略了它.我想要完成的是,我希望它只在slug不变的情况下忽略当前行.当它被更改为另一行中已经唯一的东西时,我希望它抛出一个错误.

Min*_*dir 8

唯一验证器就是这样的

unique:table,column,except,idColumn
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下,你可以这样做:

获取您要验证的ID,您可以从路线或任何其他适合您的方式获取; 类似的东西

$id = $this->route('id');

'slug'        => ['required','unique:appointments,slug,'.$id],
Run Code Online (Sandbox Code Playgroud)