Yii2更新数据的问题

框架是yii2

用户表中一个余额字段balance.

用户1 userId=1 现在余额 100.00 元

用户2 userId=2和用户3 userId=3 同时向用户1转款100元。

这是当时的情况。

转账用的方法:

public function transfer(){
        $userId = 1;
        $user = User::findOne($userId);
        $newBalance = $user['balance'] + 100;
        $user->balance = $newBalance;
        $user->save(false);
    }

用户2,3同时转账,但是用户1只能收到100元。。。
只能用锁的方式或者原生sql语句来保证数据的正确性吗?

阅读 10.5k
3 个回答

这种我一般使用原生SQL来做。
sql

UPDATE USER SET balance=balance+100 WHERE user_id=:uid;

yii2

Yii::$app->db->createCommand($sql,[':uid'=>$userId])->execute();

更新余额你可以换种方式,不用先查出来再update;而是直接更新,sql就是set balance = balance + 100

新手上路,请多包涵

$user = User::findOne($userId);
$old_balance = $user['balance'];
User::updateAll(['balance'=>$old_balance+100],['balance'=>$old_balance,'id'=>$userId])

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题