2017-05-17 5 views
0

私はユーザーアカウントの編集に使用しているフォームを持っています。電子メールフィールドにいくつかの検証設定があり、電子メールが一意でなければならないと指定しました。問題は、電子メールに固有の火災を要求する検証ルールであるフォームを送信するときです。私はフォームを編集しており、メールが存在することを知っているので、そうではないはずです。Laravelのユニークな:編集中にユーザー、電子メールの妥当性検査エラーが表示される

私は独自のルールを削除し、とてもtehのアカウントを編集して、ユーザーが既存の電子メールに入る発生した場合これは、コード

public function servicesAdminEditUser(){ 
     $id = request('hidden_user_id'); 
     $rules = array(
      'users_telephone_number' => 'required|unique:users,users_telephone_number', 
      'users_email' => 'required|email|unique:users,email', 
      'users_full_names' => 'required', 
      'users_gender' => 'required', 
      'users_credits' => 'required', 
      'users_email_verification_status' => 'required', 
      'users_number_verification_status' => 'required', 
      'users_moderation_status' => 'required', 
      'user_role' => 'required', 
      'users_profile_picture' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048' 
     ); 

      $customMessages = [ 
    'users_telephone_number.required' => 'The telephone number is required.', 
    'users_email.required' => 'We need a unique email', 
    'users_full_names.required' => 'Your full names are required', 
    'users_gender.required' => 'Gender is required', 
    'users_profile_picture.required' => 'We need your profile picture', 
    'users_credits.required' => 'User Credits Are Required', 
    'users_email_verification_status.required' => 'User email verification status is required', 
    'users_number_verification_status.required' => 'User number verification status is required', 
    'users_moderation_status.required' => 'User moderation status is required', 
    'user_role.required' => 'User role is required', 
    ]; 

     $validator = Validator::make(Input::all(), $rules,$customMessages); 
     if ($validator->fails()) { 
      $messages = $validator->messages(); 
      return Redirect::back()->withErrors($validator); 
     } 
     else { 
     if (Input::file('users_profile_picture')->isValid()) { 
       $destinationPath = 'uploads'; 
       $extension = Input::file('users_profile_picture')->getClientOriginalExtension(); 
       $fileName = time().'_'.rand(11111,99999).'.'.$extension; 
       Input::file('users_profile_picture')->move($destinationPath, $fileName); 
      } 
      else { 
      echo 'file not valid'; 
      } 

     $updyt = User::find($id); 
     $updyt->email = request('users_email'); 
     //$reg->password = bcrypt(request('confirm-password')); 
     $updyt->users_telephone_number = request('users_telephone_number'); 
     $updyt->users_email_verification_status = request('users_email_verification_status'); 
     $updyt->users_number_verification_status = request('users_number_verification_status'); 
     $updyt->users_full_names = request('users_full_names'); 
     $updyt->users_gender = request('users_gender'); 
     $updyt->users_credits = request('users_credits'); 
     $updyt->users_profile_picture = $fileName; 
     $updyt->users_moderation_status = request('users_moderation_status');; 
     $updyt->update(); 
     //$reg->attachRole($value); 

     DB::table('role_user')->where('user_id',$id)->delete(); 
     $updyt->attachRole(Role::where('name',request('user_role'))->first()); 
     return redirect('servicesUsers'); 
     } 
    } 

で、laravelは、ブラウザ上の重複をキャッチmysqlのエラーが表示されます。どうすればこの問題を解決できますか?

答えて

1

がテーブルにあなたの電子メールのフィールド名を仮定すると、これを試してみてはemailで、要求入力mailフィールド名がusers_emailで、$idusers tableにおけるユーザーのIDが存在します。

'users_email' => 'required|email|unique:users,email,'.$id, 
+0

これは問題を解決しましたが、画像の場合、これは編集コード ''しかし、提出後、私は画像が必要であるというエラーを受け取ります。ファイル内の値は十分ではありませんか? –

+0

@GeoffreyIsle 'id =" users_profile_picture "' –

+0

を追加しようとしましたが、問題はなくなりました。 –

0

あなたは(更新のために、そのような場合には)いくつかのIDを無視したい場合は、構文を使用することができますユニークな

:idColumn

、除くテーブル、カラム、

検証中のフィールドは、特定のデータベーステーブルで一意である必要があります。 columnオプションが指定されていない場合は、フィールド名が使用されます。

'users_email' => "required|email|unique:users,email,id,{$id}", 

私は更新のための別の方法を作成することをお勧めします、これは理解することが、あなたのコードがきれいと楽になります。

関連する問題