2017-05-11 9 views
1

私のアプリケーションは、会社の従業員にデータ(例:住所)を編集する機能を提供します。彼らがそれを変更すると、マネージャは新しい情報で電子メールを受け取ります。問題は、従業員が更新をクリックするたびに電子メールが送信されることです。私はデータベースの情報を比較するためのアプリケーションが必要で、新しい情報がある場合にのみ電子メールを送信します。これを達成するための良い方法は何ですか? 申し訳ありませんが、私は言いたいことを忘れていました。電子メールには新しい情報が含まれている必要があります。だからisDirty()は私にとってはうまくいかないでしょう。ユーザーがプロファイルを新しいデータで更新する場合にのみ電子メールを送信します。 Laravel

public function editcredentials_action(Request $request) 
{ 
    $user = Auth::user(); 
    $address = $user->address; 

    $this->validate($request, [ 
     'password' => 'max:255', 
     'language' => 'integer', 
     'facebook_profile' => 'max:255', 
     'twitter_profile' => 'max:255', 

     'street'  => 'max:255', 
     'house_number' => 'max:255', 
     'city'   => 'max:255', 
     'zip_code'  => 'max:255', 
     'country'  => 'max:255', 
    ]); 


    if (!empty($request->get('password')) && $request->get('password')) { 
     $user->password = bcrypt($request->get('password')); 
    } 
    $user->facebook_profile = $request->get('facebook_profile'); 
    $user->twitter_profile = $request->get('twitter_profile'); 
    $user->language_id = $request->get('language'); 
    $user->save(); 

    if (!$address) { 
     $address = new UserAddress(); 
     $address->user_id = $user->id; 
    } 
    $address->street = $request->street; 
    $address->house_number = $request->house_number; 
    $address->city = $request->city; 
    $address->zip_code = $request->zip_code; 
    $address->country = $request->country; 
    $address->save(); 

    $data = [ 
     'email' => $user->email, 
     'facebook' => $user->facebook_profile, 
     'twitter' => $user->twitter_profile, 
     'name'  => $user->name . ' ' . $user->lastname, 
     'address' => $address, 
    ]; 


    Mail::send('emails.user-update', $data, function ($message) use ($data) { 
     $message->from('[email protected]', 'Profile change'); 
     $message->to('[email protected]'); 
     $message->subject('Profile change: ' . $data['name']); 
    }); 


    Session::flash('message', trans('app.global.saved')); 
    return back(); 
    //return redirect()->route('profile.edit-credentials'); 
} 
+0

あなたが機能をisDirty使用することができます。http://stackoverflow.com/a/36330079/4771277 –

答えて

1

私はisDirty()はここで働いてますとは思わないが、あなたは最初にユーザーデータを保存することができます:

$params = ['language', 'facebook_profile', 'twitter_profile', 'name']; 
$oldUserData = auth()->user()->only($paramsToCOmpare); 

次にsave()方法を使用した後のデータを比較:

if (count(array_diff($oldUserData, $user->only($paramsToCompare))) > 0) { 
    // Data was changed. 
} 

UserAddressモデルでも同じことができます。それが形に充填した場合には(あなたはとにかくそれを非表示にしていますので)パスワードがちょうどチェックについて:

if (!empty($request->password)) 
+0

なぜshoulnt仕事は汚い? save()の直前で汚れていないかどうかを確認し、そうであればメールを送信します。 –

関連する問題