提问者:小点点

如何在Laravel表单中只更新一个输入?


使用laravel和MySQL。我有用户更新表单与名称电子邮件密码符合密码与以下控制器验证,

$this->validate($request, [
            'name' =>'required',
            'email' => 'required|email',
            'password' => 'sometimes|min:6|confirmed'
  ]);

在我的表单中,普通用户不会更新所有输入字段。例如,一些用户只需要更新电子邮件。但是在上面的验证中,当我们只更新名称或电子邮件验证显示消息时,密码必须至少为6个字符那么如何只更新姓名或电子邮件而不更新密码?


共3个答案

匿名用户

请尝试以下代码:

$this->validate($request, [
            'name' =>'required',
            'email' => 'required|email',
  ]);

  $name  = $request->name ;
  $email = $request->email;
  $q = User::where('id','=',auth()->user()->id);
  $q->update(['name'=>$name,'email'=>$email]);

  if(isset($request->password)){
       $this->validate($request,[
        'password' => 'required|string|min:6|confirmed',
       ]);
       $password = $request->password);
       $q->update(['password'=>$password );
  }

您也可以通过将更改的密码放在单独的表单中来完成。

匿名用户

如果条件允许,请使用。当用户提交表单时,请检查哪些字段为空,哪些字段不为空。如果字段为空,则用户不想更新该信息,并且不需要对该字段运行验证。我不是laravel方面的专家,所以我不能发布任何演示代码。但我在其他框架中使用了这种方法。

匿名用户

试试这个:

$validator = Validator::make($request->all(), [
    'name' => 'required',
    'email' => 'required|email',
]);

$validator->sometimes('password', 'min:6|confirmed', function ($input) {
    return $input->password;
});

if(!$validator->fails()){
    ...
}

我不确定是否返回$input-

如果密码为空,则不要应用该规则。