1. Auto-incrémentation et auto-décrémentation d'une instance unique
Dans Sequelize, une instance (Instance) représente une ligne d'enregistrements dans la base de données. Il existe deux types d'instances : les instances non persistantes créées par Model.build() et les instances persistantes créées par des méthodes telles que Model.create(). Qu'il s'agisse d'une instance persistante ou non persistante, il existe deux méthodes, incrément() et décrémentation(), qui sont utilisées respectivement pour incrémenter et décrémenter la valeur du champ.
instance.increment(fields, [options]) - La valeur du champ est incrémentée
instance.decrement(fields, [options]) - La valeur du champ est décrémentée
Par exemple, recherchez l'utilisateur avec l'ID 1 et incrémentez son âge de 1 :
var User = sequelize.import('../lib/model/user/user'); User.findById(1).then(function(user){ user.increment('age').then(function(user){ console.log('success'); }) })
L'instruction SQL générée par la méthode incrément() est la suivante :
UPDATE `user` SET `age`=`age` + 1 WHERE `id` = 1
Les valeurs d'auto-incrémentation et d'auto-décrémentation par défaut d'incrément() et decrément() sont 1. Si vous souhaitez utiliser d'autres valeurs, vous pouvez le spécifier via le paramètre by dans le paramètre options [options].
Par exemple, réduire de 2 les champs numéro et âge de l'utilisateur peut être réalisé de la manière suivante :
user.increment(['age', 'number'], {by:2}).then(function(user){ console.log('success'); })
Généré le SQL est la suivante :
UPDATE `user` SET `age`=`age` + 2,`number`=`number` + 2 WHERE `id` = 1
Les paramètres des champs peuvent également être transmis via des objets et spécifier des valeurs d'auto-incrémentation et d'auto-décrémentation. Dans ce cas, le paramètre options.by est ignoré.
Par exemple, augmentez le numéro de l'utilisateur de 2 et diminuez son âge de 1 :
user.increment({age:-1, number:2}, {by:5}).then(function(user){ console.log('success'); })
Le SQL généré est le suivant :
UPDATE `user` SET `age`=`age` + -1,`number`=`number` + 2 WHERE `id` = 1
2. L'incrémentation et la décrémentation automatiques par lots
increment() et decrement() s'effectuent toutes deux automatiquement. -incrémenter ou décrémenter pour une seule instance Il s'agit d'une opération de décrémentation, ce qui signifie que les données de l'opération sont une ligne de données dans la base de données. Pour implémenter des opérations d'incrémentation et de décrémentation automatiques par lots telles que les suivantes, vous ne pouvez pas utiliser les opérations d'instance :
UPDATE `user` SET `age`=`age` + 1 WHERE `number` > 10;
Dans Sequelize, les opérations d'indexation sont généralement effectuées à travers des modèles (Modèle) à réaliser. Cependant, Model n'a pas de méthodes Increase() et Decrement(), il ne peut donc pas être incrémenté ou décrémenté aussi facilement qu'Instance.
À l'heure actuelle, nous pouvons l'implémenter via Model.update() et la méthode de niveau supérieur sequelize.literal() dans sequelize :
sequelize.literal(val) - Créer un littéral object< La méthode 🎜>
User.update({sex:sequelize.literal('`age` +1')}, {where:{number:{$gt:10}}}).then(function(user){ console.log('success'); })
UPDATE `user` SET `age`=`age` +1 WHERE `number` > 10