Laravel - откат транзакции не работает - PullRequest
0 голосов
/ 10 марта 2019

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

\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);  
}   

в почтовом коде была преднамеренно допущена ошибка.

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

1 Ответ

2 голосов
/ 10 марта 2019

Сначала необходимо отправить письмо, а затем зафиксировать изменения.

\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);  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...