Search code examples
javascriptmysqlnode.jssequelize.js

How to update "updatedAt" manually?


Below is the code I am using in Hooks to update the updatedAt column for two objects:

hooks: {
                afterUpdate: (group, options, callback) => {
                    console.log("groudId " + groupId + " options " + options)
                },
                afterCreate: (member, options, callback) => {
                    return new Promise((resolve, reject) => {
                        sequelize.models.Group.findOne({
                            where: {
                                id: member.group_id
                            }
                        }).then((group) => {
                            if (group) {
                                var date = new Date();
                                console.log("BEFORE group.updatedAt " + group.updatedAt)
                                group.dataValues.updatedAt = new Date()
                                console.log("CHANGED group.updatedAt " + group.updatedAt)
                                group.save().then((Group) => {
                                    if (Group) {
                                        console.log("UPDATED Group.updatedAt " + Group.updatedAt)
                                        console.log("UPDATED group.updatedAt " + group.updatedAt)
                                        resolve(Group)
                                    } else {
                                        console.log("NO GROUP Found")
                                        return reject(group.id)
                                    }
                                }).catch((error) => {
                                    return (error)
                                })
                            } else {
                                return reject(id)
                            }
                        }).catch((error) => {
                            return (reject)
                        })
                    })
                }

Console Log:

BEFORE group.updatedAt Fri Feb 17 2017 17:36:00 GMT-0800 (PST)
CHANGED group.updatedAt Tue Feb 28 2017 14:00:17 GMT-0800 (PST)
UPDATED Group.updatedAt Tue Feb 28 2017 14:00:17 GMT-0800 (PST)
UPDATED group.updatedAt Tue Feb 28 2017 14:00:17 GMT-0800 (PST)
BEFORE group.updatedAt Fri Feb 17 2017 17:36:00 GMT-0800 (PST)
CHANGED group.updatedAt Tue Feb 28 2017 14:00:19 GMT-0800 (PST)
UPDATED Group.updatedAt Tue Feb 28 2017 14:00:19 GMT-0800 (PST)
UPDATED group.updatedAt Tue Feb 28 2017 14:00:19 GMT-0800 (PST)

While the log, what I think, appears correct, why isn't the actual object in the DB updated to the new updatedAt value? Or is there an easier way to update an objects updatedAt column?


Solution

  • This worked for me

    group.changed('updatedAt', true)
    
    await group.update({
        updatedAt: new Date()
    })
    

    Calling just update with updatedAt = new Date is not enough, you must flag column as changed