这是我班上的规则:
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"'],
];
这是laravel官方文档:
有时,您可能希望在唯一检查期间忽略给定的ID。 例如,考虑一个"更新配置文件"屏幕包括 用户的姓名,电子邮件地址和位置。当然,你会想要的 验证电子邮件地址是否唯一。但是,如果只是用户 更改名称字段而不是电子邮件字段,您不需要 要抛出验证错误,因为用户已经是其所有者 电子邮件地址。你只想抛出一个验证错误 用户提供已由其他人使用的电子邮件地址 用户。要告诉唯一规则忽略用户的ID,您可以通过 ID作为第三个参数:
'email' => 'unique:users,email_address,'.$user->id.',user_id'
我尝试在我的规则中使用它:
'slug' => ['required', 'unique:appointments,id,:id'],
这确实忽略了当前行,但它完全忽略了它。我想要完成的是,我希望它只在slug不变的情况下忽略当前行。当它被改为在另一行中已经是唯一的东西时,我希望它抛出一个错误。
答案 0 :(得分:0)
例如,我们需要将联系信息更新到“用户”表中。
在模型用户中,我创建了此静态方法:
static function getContactDataValidationRules( $idUserToExcept ) {
return [
'email' => 'required|email|max:255|unique:users,email,' . $idUserToExcept,
'pec' => 'required|email|max:255',
'phone' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:8|max:20',
'mobile' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:8|max:20',
'phone2' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:8|max:20',
'recovery_email' => 'required|email|max:255',
];
}
并在我的UsersController中,进入更新我拥有的用户的方法:
$id = $request->input('id');
$request->validate(User::getContactDataValidationRules( $id ));
:-)