laravel 在更新时验证唯一字段
laravel validate unique fields on update
我正在使用 L5 存储库并且它有验证程序包 (https://github.com/andersao/laravel-validator) 但是我在更新它时验证唯一字段时遇到问题,有人可以帮助我吗???
****** 下面的示例我在 RULE_UPDATE 上以这种方式尝试但没有成功..
(((((我要验证的字段:people_id,发送电子邮件,因为这些仅对其他用户而言是唯一的,而不是对正在更新的当前用户而言))) )))))
调用 UserService.php 中的验证:
使用Prettus\Validator\Contracts\ValidatorInterface;
public __construct(){
$this->validator = \App::make('App\Validators\UserValidator');
}
save($data){
if(!empty($data['id'])){
$this->validator->with($data)->passesOrFail(ValidatorInterface::RULE_UPDATE);
}else{
$this->validator->with($data)->passesOrFail(ValidatorInterface::RULE_CREATE);
}
}
命名空间App\Validators;
使用\Prettus\Validator\Contracts\ValidatorInterface;
使用 \Prettus\Validator\LaravelValidator;
class UserValidator 扩展了 LaravelValidator
{
protected $rules = [
ValidatorInterface::RULE_CREATE => [
'people_id' => 'required|unique:users',
'active' => 'required',
'available_chat' => 'required',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'masters_id' => 'required',
],
ValidatorInterface::RULE_UPDATE => [
'id' => 'required',
'people_id' => 'required|unique:users,id,:id',
'active' => 'required',
'available_chat' => 'required',
'email' => 'required|string|email|max:255|unique:users,id,:id',
//'password' => 'required|string|min:6|confirmed',
//'masters_id' => 'required',
],
];
protected $messages = [
'id.required' => 'Usuário não encontrado!',
'people_id.required' => 'Pessoa é obrigatório',
'people_id.unique' => 'Pessoa já cadastrada',
'active.required' => 'Obrigatório',
'available_chat.required' => 'Obrigatório',
'email.required' => 'Digite o e-mail',
'password.required' => 'Digite a senha',
'password.min' => 'Digite uma senha com 6 caracteres',
'password.confirmed' => 'Confirme a senha corretamente',
'email.unique' => 'E-mail já cadastrado',
];
}
While updating you need to force a unique rule to Ignore Given ID
'people_id' => 'required|user,people_id,'.$id
//id is the primary id of the field which you want to update
with unique validation which must be ignored
尝试将寄存器的id放在setId方法中
$this->validator->with($data)->setId($id)->passesOrFail(ValidatorInterface::RULE_UPDATE);
尝试使用以下会起作用的更改。
在您的验证器中添加以下代码以检查唯一电子邮件验证
ValidatorInterface::RULE_UPDATE => [
'email' => 'required|unique:customers,email,id'
],
之后像这样设置验证码的id
$this->validator->with($request->all())->setId($id)->passesOrFail(ValidatorInterface::RULE_UPDATE);
我正在使用 L5 存储库并且它有验证程序包 (https://github.com/andersao/laravel-validator) 但是我在更新它时验证唯一字段时遇到问题,有人可以帮助我吗???
****** 下面的示例我在 RULE_UPDATE 上以这种方式尝试但没有成功..
(((((我要验证的字段:people_id,发送电子邮件,因为这些仅对其他用户而言是唯一的,而不是对正在更新的当前用户而言))) )))))
调用 UserService.php 中的验证:
使用Prettus\Validator\Contracts\ValidatorInterface;
public __construct(){
$this->validator = \App::make('App\Validators\UserValidator');
}
save($data){
if(!empty($data['id'])){
$this->validator->with($data)->passesOrFail(ValidatorInterface::RULE_UPDATE);
}else{
$this->validator->with($data)->passesOrFail(ValidatorInterface::RULE_CREATE);
}
}
命名空间App\Validators;
使用\Prettus\Validator\Contracts\ValidatorInterface; 使用 \Prettus\Validator\LaravelValidator;
class UserValidator 扩展了 LaravelValidator {
protected $rules = [
ValidatorInterface::RULE_CREATE => [
'people_id' => 'required|unique:users',
'active' => 'required',
'available_chat' => 'required',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'masters_id' => 'required',
],
ValidatorInterface::RULE_UPDATE => [
'id' => 'required',
'people_id' => 'required|unique:users,id,:id',
'active' => 'required',
'available_chat' => 'required',
'email' => 'required|string|email|max:255|unique:users,id,:id',
//'password' => 'required|string|min:6|confirmed',
//'masters_id' => 'required',
],
];
protected $messages = [
'id.required' => 'Usuário não encontrado!',
'people_id.required' => 'Pessoa é obrigatório',
'people_id.unique' => 'Pessoa já cadastrada',
'active.required' => 'Obrigatório',
'available_chat.required' => 'Obrigatório',
'email.required' => 'Digite o e-mail',
'password.required' => 'Digite a senha',
'password.min' => 'Digite uma senha com 6 caracteres',
'password.confirmed' => 'Confirme a senha corretamente',
'email.unique' => 'E-mail já cadastrado',
];
}
While updating you need to force a unique rule to Ignore Given ID
'people_id' => 'required|user,people_id,'.$id
//id is the primary id of the field which you want to update
with unique validation which must be ignored
尝试将寄存器的id放在setId方法中
$this->validator->with($data)->setId($id)->passesOrFail(ValidatorInterface::RULE_UPDATE);
尝试使用以下会起作用的更改。 在您的验证器中添加以下代码以检查唯一电子邮件验证
ValidatorInterface::RULE_UPDATE => [
'email' => 'required|unique:customers,email,id'
],
之后像这样设置验证码的id
$this->validator->with($request->all())->setId($id)->passesOrFail(ValidatorInterface::RULE_UPDATE);