2015-07-01 14:49:01 3431次浏览 4条回答 0 悬赏 6 金钱

现在有两张表user,log
我想实现的功能就是:我给user里的money字段加/钱,如果加/减成功,才在log插入一条记录,不成功则不插入。
请问这样一个事务怎么写?
以下是我的写法,达不到我想要的功能,不知道是哪里不对,以下我user表里加钱不成功,但log表还是插入了记录

$connection = Yii::$app->db;
$transaction = $connection->beginTransaction();
try {
    //加钱
    $connection->createCommand()
    ->update(
        $uModel->tableName(), [
        'jifen' => 5,
        ],
        ['id'=>$id]
    )
    ->execute();
    //写日志       
    $connection->createCommand()
    ->insert($jfModel->tableName(), [
        'uid'     => $id,
        'income'  => $jfModel->income,
        'remark'  => $jfModel->remark,
        'point'   => $jfModel->point,
        'xiaojie' => 5,
        'addtime' => $jfModel->addtime
    ])
    ->execute();                
    $transaction->commit();
} catch(Exception $e) {     
    $transaction->rollback();       
}
  • 回答于 2015-07-01 15:07 举报
    } catch(Exception $e) {		
    	$transaction->rollback();		
    }
    

    catch里面rollback的流程你哪里触发的?

    jifen字段你确定自己做了 jifen = jifen + n类似这种操作。

    4 条回复
    回复于 2015-07-01 15:47 回复

    怎么触发?

    回复于 2015-07-01 16:25 回复

    你不是需求里面,加不成功就rollback么?那你逻辑里面没有抛出异常的过程,什么时候是加不成功呢?

    回复于 2015-07-01 16:59 回复

    大大,那怎么写呀,你可以忽略我的写的代码,你把你的代码贴上来我看看呀

    回复于 2015-07-02 00:12 回复

    可以看看guide里 中的乐观锁的知识点,看完你应该会有思路

  • 回答于 2015-07-02 16:34 举报

    update没有抛出异常的话,那就是执行成功了,但是可能更新的记录数是0,你这样的写法,每次都是对指定id的记录设置jifen=5,跑多少次更新记录数都一直是0吧,不会抛异常,也不会有记录变化。

    1 条回复
    回复于 2015-07-05 18:16 回复

    jifen=5这里我知道怎么写,这是为了测试用而已,更新记录数为0,下面的语句还是执行了。达不到我想要的,要么全成功,要么全不成功

  • 回答于 2015-07-06 10:59 举报

    不抛出异常怎么catch

  • 回答于 2015-07-07 09:39 举报

    加个判断可不可以啊,更新数大于零才执行后续代码?

您需要登录后才可以回答。登录 | 立即注册
qq260101081
见习主管

qq260101081 广州

注册时间:2014-10-30
最后登录:2017-09-25
在线时长:13小时20分
  • 粉丝4
  • 金钱40
  • 威望10
  • 积分270

热门问题