74686


ユーザー情報の更新(Edit~Update)をやっています。

### 実現したいこと

パスワードだけ更新したい時、メールアドレスだけ更新したい時、どちらかを入力をして更新させたい。

### 現状

パスワードだけ入力して更新すると、"メールアドレスはすでに存在しています。" というエラーになってしまいます。  
パスワードを変更するために、メールアドレスも変更しないといけない、仕組みになってしまっている。

rulesメソッドを以下のように編集しました。uniqueになっているにで、バリデーションに引っかかってしまいます。  
とはいえ、UserRequestを削除してしまうと、どんな値でも保存されてしまうので困っています。

[![画像の説明をここに入力](https://i.stack.imgur.com/z3kZl.png)](https://i.stack.imgur.com/z3kZl.png)

[code]

    public function update(UserRequest $request, $id)
    {
        $user     = User::find($id);
        $name     = $request->input('name');
        $email    = $request->input('email');
        $password = $request->input('password');
        $params   = [
          'name'      => $name,
          'email'     => $email,
          'password'  => Hash::make($password),
        ];
        $this->authorize('update', $user);
        if (!$user->userSave($params)) {
          // 更新失敗
          return redirect()
                 ->route('user.edit', ['user' => $user->id])
                 ->with('error_message', 'Update user failed');
        }
        return redirect()->route('user.index')->with('flash_message', 'update success!!');
    }
    
[/code]

[code]

    public function rules()
    {
        $rules = [
            'email'     => 'required|email',
            'password'  => 'required|min:6',
            'password_confirmation' => 'filled',
        ];
    
       if ($this->password_confirmation) {
        $rules['name']      = 'required|max:20';
        $rules['email']     = 'required|email|unique:users';
        $rules['password']  = 'required|min:6|confirmed';
        }
        return $rules;
    }
    
[/code]


CC BY-SA 4.0
2021-03-15T10:00:06.697
74683
2021-03-15T11:27:50.250
2021-03-15T11:11:16.423
3060
44328
question
php laravel
ユーザーの情報の更新について


そのためにuniqueでは「このIDだけは除外する」指定ができる。

[code]

    $rules['email']     = 'required|email|unique:users,email,'.$this->user()->id;
    
[/code]

簡単に書くためのRuleクラスもある。

[code]

    use Illuminate\Validation\Rule;
    
    $rules['email'] = ['required', 'email', Rule::unique('users')->ignore($this->user()->id)];
    
[/code]


CC BY-SA 4.0
2021-03-15T11:27:50.250
74686
2021-03-15T11:27:50.250
21074
74683
answer