首页 > YII中的updateByPk中的参数是不是有点鸡肋?

YII中的updateByPk中的参数是不是有点鸡肋?

这updateByPk有四个参数,其中第三个参数我感觉有点鸡肋。因为第三个参数是条件。那我主键只有一个,我干嘛还要整一个条件呢?也就是通过主键就能找到唯一的列,我还要条件干啥啊!


比如你要更新ID为3的帐号给他扣除10块钱

读余额,然后直接updateByPk

然后你就完蛋了,因为交易频率高的时候,不能保证你读到余额以后,没有别的进程写了另一个新的余额进去,连买2个却只扣了一次钱之类的问题就来了

这时候就需要加条件了,具体来说

balance, version = readByPk pk
balance -= 10
updateBypk pk, {balance:balance, version:version+1}, version=version

通过“版本号”防止并发场景下数据错乱。好像行话叫乐观锁,可以去了解一下


比如用户要更新自己写的文章,那一般都是先靠主键定位到文章ID,再通过附加条件“uid=:uid”来确定是当前用户来防止其他用户提交恶意ID来做修改。(目前我只有这种应用场景用到第三个参数)


不是。
首先,最后两个参数是可以省略的,对于简单的更新,这个方法调用很方便。
其次,如果更新还包含其它限制,那么后面的两个参数就派上用场了。一般情况下,用主键来唯一确定一条记录,这里把主键写在第一参数位置,可以突出主键,出错的概率更小。

【热门文章】
【热门文章】