懂事务的看过来,谢谢大侠 [ 2.0 版本 ]
现在有两张表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();
}
共 4 个回答
-
} catch(Exception $e) { $transaction->rollback(); }
catch里面rollback的流程你哪里触发的?
jifen字段你确定自己做了
jifen = jifen + n
类似这种操作。共 4 条回复qq260101081 回复于 2015-07-01 15:47 回复怎么触发?
@qq260101081 你不是需求里面,加不成功就rollback么?那你逻辑里面没有抛出异常的过程,什么时候是加不成功呢?
qq260101081 回复于 2015-07-01 16:59 回复大大,那怎么写呀,你可以忽略我的写的代码,你把你的代码贴上来我看看呀
@qq260101081 可以看看guide里 中的乐观锁的知识点,看完你应该会有思路
-
chocoboxxf 回答于 2015-07-02 16:34 举报
update没有抛出异常的话,那就是执行成功了,但是可能更新的记录数是0,你这样的写法,每次都是对指定id的记录设置jifen=5,跑多少次更新记录数都一直是0吧,不会抛异常,也不会有记录变化。
共 1 条回复qq260101081 回复于 2015-07-05 18:16 回复jifen=5这里我知道怎么写,这是为了测试用而已,更新记录数为0,下面的语句还是执行了。达不到我想要的,要么全成功,要么全不成功
qq260101081 广州
注册时间:2014-10-30
最后登录:2017-09-25
在线时长:13小时20分
最后登录:2017-09-25
在线时长:13小时20分
- 粉丝4
- 金钱40
- 威望10
- 积分270