相关文章推荐

一、单实例自增、自减

在Sequelize中,一个实例(Instance)表示数据库中的一行记录。Instance有两种:由Model.build()创建的非持久化实例,和由Model.create()等方法创建的持久化实例。无论是持久化还是非持久化实例,都会有increment() 、decrement()两人上方法,分别用于字段值的自增和自减两种操作。

instance.increment(fields,[options]) - 字段值自增

instance.decrement(fields,[options])- 字段值自减

如,查找id为1的用户,并将其年龄自增1:

其中increment()方法生成的sql语句如下:

increment()和decrement()默认的自增、自减值是1。如果希望使用其它值,可在选项参数[options]中通过by参数指定。

如,将用户的number、age两个字段减小2,可以通过以下方式实现:

sql;">

UPDATE `user` SET `age`=`age` + 2,`number`=`number` + 2 WHERE `id` = 1

fields参数还可以通过对象传入,并指定自增、自减值。这种情况下,会忽略options.by参数。

如,将用户的number增加2、age减小1:

sql;">

UPDATE `user` SET `age`=`age` + -1,`number`=`number` + 2 WHERE `id` = 1

二、批量自增、自减

increment()和decrement()都是针对单个实例进行自增或自减操作的,也就是说操作的数据为数据库中的一行数据。要实现类似如下批量自增、自减操作,就无法通过Instance操作:

在Sequelize中,指量操作一般是通过模型(Model)来实现。但Model并没有increment()和decrement()方法,无法像Instance那样方便的进行自增或自减。

这时,我们可以通过Model.update()并借助sequelize中的顶级方法sequelize.literal()来实现:

sequelize.literal(val)- 创建字面量对象

sequelize.literal()方法用于创建一个字面量对象,该对象(val)会被直接传入所生成的sql语句中,而不会进行任何转义。

如,将number大于10的用户年龄增加1:

生成的sql语句如下:

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

 
推荐文章