У меня есть код для сохранения пользователя и код для отправки почты, но я хочу откатиться, если есть ошибка с сохранением или отправкой почты, это мой код выглядит так:

\DB::beginTransaction();

try{
    $user->save();
    //role
    $user->attachRole($role);
    //send email

    \DB::commit();
    Mail::to($user->email)->send(new ActivationCode($user));
    return response()->json([
        'status' => 'success',
        'message' => 'Berhasil mendaftar, cek email anda untuk mendapatkan kode aktivasi'
    ], 201);    

}catch(\Exception $e){
    \DB::rollback();
    return response()->json([
        'status' => 'fail',
        'message' => 'Terjadi kesalahan, harap periksa kembali form pendaftaran'
    ], 400);  
}   

Почтовый код был намеренно ошибочным.

Проблема: ловушка достигнута, но данные все еще вставлены в базу данных

0
Mamen 10 Мар 2019 в 15:34

1 ответ

Лучший ответ

Вы должны сначала отправить почту, а затем зафиксировать изменения.

\DB::beginTransaction();

try{
    $user->save();
    //role
    $user->attachRole($role);
    //send email

    Mail::to($user->email)->send(new ActivationCode($user));
    \DB::commit();
    return response()->json([
        'status' => 'success',
        'message' => 'Berhasil mendaftar, cek email anda untuk mendapatkan kode aktivasi'
    ], 201);    

}catch(\Exception $e){
    \DB::rollback();
    return response()->json([
        'status' => 'fail',
        'message' => 'Terjadi kesalahan, harap periksa kembali form pendaftaran'
    ], 400);  
}
2
Davit 10 Мар 2019 в 12:42