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循环里面,当循环某个环节出错时,抛出异常后继续循环.