tp6 乐观锁用法不对,还是源代码有点问题。

浏览:229 发布日期:2019/09/02 分类:ThinkPHP6专区 关键字: tp6 乐观锁
1.数据库字段名, lock_version / int(10) / 属性(UNSIGNED) /空(否) / 默认值(0)
2. 模型对象中:
use think\model\concern\OptimLock;

class base extends Model
{
use OptimLock;
}
3. 控制器
$user = User::find(17);
$user->username="111";
$user->save();

这样不起作用,我把lock_version默认值改为1,但新增插入的时候还是lock_version还是为0,这种用法对吗???


看了think\model\concern\OptimLock源码:protected function updateLockVersion(): void
    {
        $optimLock = $this->getOptimLockField();

        if ($optimLock && $lockVer = $this->getOrigin($optimLock)) {
            // 更新乐观锁
            $this->set($optimLock, $lockVer + 1);
        }
    }

    public function getWhere()
    {
        $where     = parent::getWhere();
        $optimLock = $this->getOptimLockField();

        if ($optimLock && $lockVer = $this->getOrigin($optimLock)) {
            $where[] = [$optimLock, '=', $lockVer];
        }

        return $where;
    }
保持上面lock_version字段定义,然后作了两个小修改:protected function updateLockVersion(): void
    {
        $optimLock = $this->getOptimLockField();
        $lockVer = $this->getOrigin($optimLock);
        if ($optimLock && $lockVer!==null) {
            $this->set($optimLock, $lockVer + 1);
        }
    }

    public function getWhere()
    {
        $where     = parent::getWhere();
        $optimLock = $this->getOptimLockField();
        $lockVer = $this->getOrigin($optimLock);
        if ($optimLock && $lockVer!==null) {
            $where[] = [$optimLock, '=', $lockVer];
        }
        return $where;
    }
这样的话,每次更新记录,lock_version的值就能自动+1

因为方便于升级,不想改动源码。
最佳答案
评论( 相关
后面还有条评论,点击查看>>