Sequelize:按列更新它的旧值

Posted

技术标签:

【中文标题】Sequelize:按列更新它的旧值【英文标题】:Sequelize: update by column it's old value 【发布时间】:2015-06-14 14:44:26 【问题描述】:

我正在尝试通过此查询使用 Sequelize 更新一组数据

Users.update(
    flag: 'flag & ~ 2'
 , 
    where : 
        id :
            gt : 2
        
    
)

生成的查询是

UPDATE `users` SET `flag`='flag & ~ 2' WHERE id > 2

但应该是

UPDATE `users` SET `flag`=flag & ~ 2 WHERE id > 2

所以我的问题是如何通过旧值更新数据

问候

【问题讨论】:

【参考方案1】:

您应该可以通过以下方式做到这一点:

Users.update(
    flag: sequelize.literal('flag & ~ 2')
 , 
    where : 
        id :
            gt : 2
        
    
);

【讨论】:

【参考方案2】:

最简单的解决方案是使用raw queries:

sequelize.query("UPDATE users SET flag=flag & ~ 2 WHERE id > 2").spread(function(results, metadata) 
  // Results will be an empty array and metadata will contain the number of affected rows.
)

【讨论】:

感谢 hexerei 我知道这个解决方案,但我不想编写原始查询 恐怕您可能在一个查询中找不到其他解决方案。否则您必须先选择值,然后在本地进行修改并更新结果。在Users.update(...) 的上下文中,您没有指向该行的 this,因此您不能使用 get 函数 请参阅***.com/a/30145792/831499,了解使用sequelize.literal 进行一次查询的解决方案。【参考方案3】:

你可以用 sequelize literal 做到这一点。

model.update('count': sequelize.literal('count + 1'),  where:  id: 1 )

您也可以使用增量方法来执行此操作,其中 by 指示您要从哪个值递增。

Model.increment('seq',  by: 5, where:  id: 'model_id' );

【讨论】:

以上是关于Sequelize:按列更新它的旧值的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 Sequelize 更改列或添加新列时更新迁移文件

具有父子关系的 2 个实体的 GraphQL 突变返回第二个实体的旧值

汇编中变量的旧值在哪里?

envers 中 _aud 表中的旧值

如何在blade.php中使用vue获取字段的旧值

laravel 刀片中多选选项中的旧值