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不变的情况下忽略当前行.当它被更改为另一行中已经唯一的东西时,我希望它抛出一个错误.
唯一验证器就是这样的
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)