ホーム>source

管理者としてユーザーを更新しようとしています。

ユーザー名を変更していますが、メールは一意でなければならないというメッセージが表示されます。

どうすれば修正できますか。

パブリック関数update($id、PutUser $request) {     if(auth()->id()== $id){         redirect()->を返します back()->withFlashDanger( 'Permission Denied、You can not edit own profile。');     }

$user = User::find($id);

$user->update((array_merge($request->validated(), ['county' => request('county')])));
//Update model_has_roles model with assignees_roles

return redirect()->route('users.index')->withFlashSuccess(trans("alerts.users.updated"));
}

これはリクエストクラスです

    public function authorize()
     {
         return true;
     }
     public function rules()
     {
         $user_id =  $this->input('id');
         return [
           'name' => 'required|string',
           'username' => 'required',
           'email' => 'required|email|unique:users,email'.$user_id,
           'gender' => 'required',
           'phone' => 'sometimes|numeric',
           'address' => 'sometimes|string',
           'country_id' => 'required',
         ];
     }
}

電子メールの検証に失敗し続けます。 'メールは、すでに使われています'。何か案が

あなたの答え
  • 解決した方法 # 1

    email の後にコンマがありません  検証のラベル:

    return [
        'name' => 'required|string',
        'username' => 'required',
        'email' => 'required|email|unique:users,email,'.$user_id,
        'gender' => 'required',
        'phone' => 'sometimes|numeric',
        'address' => 'sometimes|string',
        'country_id' => 'required',
    ];
    
    

    Laravel 5.3(私は信じている)以降、ルールビルダーを使用してより記述的な検証ルールを作成することもできます。これらは人間にとって読みやすく解釈しやすいため、エラー率が低くなります。

    use Illuminate\Validation\Rule;
    return [
        'email' => [
            'required',
            Rule::unique('users', 'email')->except($user_id),
        ]
    ];
    
    

    https://medium.com/@tomgrohl/why-you-should-be-using-rule-objects-in-laravel-5-5-c2505e729b40

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ Android StudioのエミュレータにAPKをインストールする方法