原生PHP、Laravel 5.4、Yii 2とThinkPHP 3.2のトランザクション・インスタンス
2385 ワード
1、オリジナルMySQL
2、Laravel5.4
3、Yii2
4、ThinkPHP3.2
//
mysql_query('START TRANSACTION');
$res1 = mysql_query(update table set money=money-1 where id =)
$res2 = mysql_query(update table set money=money+1 where id =)
if($res1 && $res2){
//
mysql_query('COMMIT');
}else{
//
mysql_query('ROLLBACK');
}
2、Laravel5.4
DB::beginTransaction();
try{
//
$data['name'] = 'test_name';
$data['age'] = 25;
$getGroupId = DB::table('db_name.table_name1')->insertGetId($data);
foreach($list_data as $v) {
DB::table('db_name.table_name2')->insert([
'group_id' => $getGroupId,
'name' => $v['name']
]);
}
//
DB::commit();
} catch (\Exception $exception) {
//
DB::rollBack();
throw new \Exception(' !');
}
3、Yii2
//
$transaction = Yii::$app->db->beginTransaction();
try {
//
$res = $this->save();
$data = [];
foreach ($category_ids as $val) {
$data[] = [$this->id, $val];
}
// ,
CategoryArticle::deleteAll('post_id = :post_id ', [':post_id' => $this->id]);
//
Yii::$app->db->createCommand()->batchInsert('feehi_category_article', ['post_id','category_id'], $data)->execute();
//
$transaction->commit();
} catch (\Exception $e) {
//
$transaction->rollback();
//
throw $e;
}
4、ThinkPHP3.2
$modelRefund = D('Home/OrderRefund');
$modelDetail = D('Home/OrderDetail');
//
$modelRefund->startTrans();
$refund_status = 1;
$updateRefundRes = $modelRefund->saveRefundStatus($where,$refund_status);
$status =6;
foreach($order_detail as $k => $v){
$where['id'] = $v;
$updateDetailRes = $modelDetail->saveDetailCompleteStatus($where,$status);
}
if($updateRefundRes && $updateDetailRes){
//
$modelRefund->commit();
$this->success(C('OPERA_SUCCESS'));
}else{
//
$modelRefund->rollback();
$this->error(C('OPERA_FAILD'));
}