diff --git a/lib/model.js b/lib/model.js index 9960422d2383..f6550a7fa180 100644 --- a/lib/model.js +++ b/lib/model.js @@ -3315,6 +3315,15 @@ class Model { } return f; }); + } else if (fields && typeof fields === 'object') { + fields = Object.keys(fields).reduce((rawFields, f) => { + if (this.rawAttributes[f] && this.rawAttributes[f].field && this.rawAttributes[f].field !== f) { + rawFields[this.rawAttributes[f].field] = fields[f]; + } else { + rawFields[f] = fields[f]; + } + return rawFields; + }, {}); } this._injectScope(options); diff --git a/test/integration/instance/increment.test.js b/test/integration/instance/increment.test.js index ab1b15224823..d8345c25af9a 100644 --- a/test/integration/instance/increment.test.js +++ b/test/integration/instance/increment.test.js @@ -28,6 +28,7 @@ describe(Support.getTestDialectTeaser('Instance'), () => { touchedAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW }, aNumber: { type: DataTypes.INTEGER }, bNumber: { type: DataTypes.INTEGER }, + cNumber: { type: DataTypes.INTEGER, field: 'CNumberColumn' }, aDate: { type: DataTypes.DATE }, validateTest: { @@ -57,7 +58,7 @@ describe(Support.getTestDialectTeaser('Instance'), () => { describe('increment', () => { beforeEach(async function() { - await this.User.create({ id: 1, aNumber: 0, bNumber: 0 }); + await this.User.create({ id: 1, aNumber: 0, bNumber: 0, cNumber: 0 }); }); if (current.dialect.supports.transactions) { @@ -150,6 +151,27 @@ describe(Support.getTestDialectTeaser('Instance'), () => { expect(user3.bNumber).to.be.equal(2); }); + it('single value should work when field name is different from database column name', async function() { + const user = await this.User.findByPk(1); + await user.increment('cNumber'); + const user2 = await this.User.findByPk(1); + expect(user2.cNumber).to.be.equal(1); + }); + + it('array should work when field name is different from database column name', async function() { + const user = await this.User.findByPk(1); + await user.increment(['cNumber']); + const user2 = await this.User.findByPk(1); + expect(user2.cNumber).to.be.equal(1); + }); + + it('key value should work when field name is different from database column name', async function() { + const user = await this.User.findByPk(1); + await user.increment({ cNumber: 1 }); + const user2 = await this.User.findByPk(1); + expect(user2.cNumber).to.be.equal(1); + }); + it('with timestamps set to true', async function() { const User = this.sequelize.define('IncrementUser', { aNumber: DataTypes.INTEGER