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

https://laravel.com/docs/5.2/validation#rule-unique

尝试将寄存器的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);