Laravel事務處理

事務處理

對數據庫進行多次操作,要麼都成功,要麼都回滾,就用到了事務處理.

laravel事務處理的兩種常用方法

方法一:

DB::beginTransaction();//開啓事務,不需要引入文件;
try {
            $sql_one = DB::table('xxxxxx')->insert($row_one);//轉移
            $sql_two = DB::table('yyyyyy')->where('message_id', $aaa)->delete();//刪除

            DB::commit();

}catch (\Exception $e){
    DB::rollBack();
    throw $e;
}

方法二:

DB::beginTransaction();//開啓事務,不需要引入文件;
  $sql_one = DB::table('xxxxxx')->insert($row_one);//轉移
  $sql_two = DB::table('yyyyyy')->where('message_id', $aaa)->delete();//刪除

 if ($sql_two && $sql_two) {
                DB::commit();
				return 1;
            } else {
                DB::rollBack();
				return 0;
            }

我用的時候,需要一個while循環,所以就這樣:

DB::beginTransaction();//開啓事務,不需要引入文件;
try {
    while (true) { // 這裏看上去這個循環會一直執行
        $row_one = DB::table('yyyyyy')->where('release_date', '<', $mothTime)->first();
        if ($row_one) {
            $row_one = (array)$row_one;
            $aaa = $row_one['message_id'];
            $row_two = DB::table('xxxxxx')->insert($row_one);//轉移
            $row_three = DB::table('yyyyyy')->where('message_id', $aaa)->delete();//刪除
             DB::commit();
        }else {
            break;
        }
    }

}catch (\Exception $e){
    DB::rollBack();
}

小知識

while循環放在try裏面,當循環某個環節出錯時,直接拋出異常停止循環
try放在while循環裏面,當循環某個環節出錯時,拋出異常後繼續循環.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章