Ответ 1
Как и Молда, вы можете использовать $gt
, $lt
, $gte
или $lte
с датой:
model.findAll({
where: {
start_datetime: {
$gte: moment().subtract(7, 'days').toDate()
}
}
})
Я использую sequelize как мой backend ORM. Теперь я хочу сделать некоторые операции с датой.
Подробнее Я хочу получить все данные, где дата сейчас и 7 дней назад.
Проблема заключается в том, что в документации не указано, какие операции вы можете выполнять на Datatypes.DATE
Может ли кто-нибудь указать мне в правильном направлении?
Как и Молда, вы можете использовать $gt
, $lt
, $gte
или $lte
с датой:
model.findAll({
where: {
start_datetime: {
$gte: moment().subtract(7, 'days').toDate()
}
}
})
Мне пришлось импортировать символы операторов из sequelize и использовать так.
const { Op } = require('sequelize')
model.findAll({
where: {
start_datetime: {
[Op.gte]: moment().subtract(7, 'days').toDate()
}
}
})
Согласно документам, по соображениям безопасности это считается наилучшей практикой.
См. Http://docs.sequelizejs.com/manual/tutorial/querying.html для получения дополнительной информации.
Использование Sequelize без псевдонимов повышает безопасность. Некоторые фреймворки автоматически анализируют пользовательский ввод в js-объектах, и если вам не удастся санировать входные данные, возможно, можно ввести объект с помощью строковых операторов для Sequelize.
(...)
Для большей безопасности настоятельно рекомендуется использовать Sequelize.Op и не зависеть ни от какого псевдонима строки. Вы можете ограничить псевдоним, в котором будет нуждаться ваше приложение, установив опцию operatorAliases, не забывайте дезинфицировать пользовательский ввод, особенно когда вы непосредственно передаете их методам Sequelize.
Вы также можете использовать Sequelize.literal()
для выполнения манипулирования датами в SQL.
Следующий код работает с Postgres, но я уверен, что нечто подобное может быть сделано и в других системах:
model.findAll({
where: {
start_datetime: {
$gte: Sequelize.literal('NOW() - INTERVAL "7d"'),
}
}
})