Как обновить с Sequelize с помощью "NOW ()" на метке времени?
Я пытаюсь сделать что-то вроде следующего:
model.updateAttributes({syncedAt: 'NOW()'});
очевидно, что это не работает, потому что он просто передается как строка. Я хочу избежать передачи метки времени, построенной узлом, потому что позже я сравниваю ее с другим полем "ON UPDATE CURRENT_TIMESTAMP", и база данных и источник могут работать в разное время.
является ли мой единственный вариант просто сделать процедуру базы данных и вызвать это?
2 ответов
можно использовать Sequelize.fn
чтобы обернуть его правильно:
instance.updateAttributes({syncedAt: sequelize.fn('NOW')});
вот полный рабочий пример:
'use strict';
var Sequelize = require('sequelize');
var sequelize = new Sequelize(/*database*/'test', /*username*/'test', /*password*/'test',
{host: 'localhost', dialect: 'postgres'});
var model = sequelize.define('model', {
syncedAt: {type: Sequelize.DATE}
});
sequelize.sync({force: true})
.then(function () {
return model.create({});
})
.then(function () {
return model.find({});
})
.then(function(instance){
return instance.updateAttributes({syncedAt: sequelize.fn('NOW')});
})
.then(function () {
process.exit(0);
})
.catch(function(err){
console.log('Caught error! ' + err);
});
производит
UPDATE "models" SET "syncedAt"=NOW(),"updatedAt"='2015-02-09 18:05:28.989 +00:00' WHERE "id"=1
стоит упомянуть (для людей, приходящих сюда через поиск), что NOW () не является стандартным и не работает на SQL server - поэтому не делайте этого, если вы заботитесь о переносимости.
sequelize.literal('CURRENT_TIMESTAMP')
может работать лучше