鍍金池/ 問答/PHP  數(shù)據(jù)庫/ php+mysql 怎么解決在對多表進行操作時,卡在中間的步驟?

php+mysql 怎么解決在對多表進行操作時,卡在中間的步驟?

系統(tǒng)信息
php 7.1
MariaDB 10
Laravel 5.6
centos 7

用戶在使用余額下單時,提交訂單,會有一系列的表操作,分別是
1,更新用戶表的余額字段
2,往余額記錄表里插入數(shù)據(jù)
3,調(diào)用第三方接口發(fā)送余額變動通知(微信模版通知)
4,創(chuàng)建訂單
5,調(diào)用第三方接口發(fā)送下單成功通知(微信模版通知)

已經(jīng)使用了Laravel的數(shù)據(jù)庫事務(wù)了,用戶在第1步扣完余額字段的數(shù)字后就卡住了,然后退出了程序,第2步的記錄以及后面的數(shù)據(jù)都沒有了,這種情況該怎么解決?

回答
編輯回答
愛礙唉

沒用過Laravel,但是解決思路一樣的,哥子,我給你個偽代碼:

$transaction = (new Transaction());

try {
    $setBalanceResult = UserModel::model()->set('balance',-100.00);
    
    if (!$setBalanceResult) throw new \Exception('修改余額失敗!');
    
    $createBalanceRecord = BalanceRecord::model()->create([
        'user_id' => $user_id,
        'content' => 'XXX使用了100元'
    ]);
    if (!$createBalanceRecord) throw new \Exception('寫入余額日志記錄失敗');
    
    $order = Order::model()->create([
        // 這里是訂單數(shù)據(jù)
    ]);
    if (!$order) throw new \Exception('訂單創(chuàng)建失敗');
    
    // 把發(fā)消息添加到發(fā)送消息隊列程序,通過隊列任務(wù)程序從隊列里取消息發(fā)送 start
    (new Queue())
        ->sendMsg('你的余額已經(jīng)變動')
        ->sendMsg('下單成功');
    // 把發(fā)消息添加到發(fā)送消息隊列程序,通過隊列任務(wù)程序從隊列里取消息發(fā)送 start 
    $transaction->commit(); // 沒有問題提交事務(wù)   
} catch(\Exception $e) {
    $transaction->rollback(); // 出錯事務(wù)回滾
    var_dump($e->getMessage()); // 打印錯誤,具體還可以進行異常返回到更上層
}
2017年12月26日 12:43
編輯回答
生性

退出了程序是異常退出的話,會有日志的,可以貼出來嗎

2018年2月9日 01:38