事務處理
對數據庫進行多次操作,要麼都成功,要麼都回滾,就用到了事務處理.
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循環裏面,當循環某個環節出錯時,拋出異常後繼續循環.