バックエンドORMとしてsequelizeを使用しています。今、私はいくつかの日付の操作をしたいと思います。
もっと具体的には、日付が現在から7日前のすべてのデータを取得したいです。
問題は、ドキュメントがDatatypes.DATE
で実行できる操作を指定していないことです。
誰かが私を正しい方向に向けることができますか?
Moldaが言うように、$gt
、$lt
、$gte
または$lte
日付付き:
model.findAll({
where: {
start_datetime: {
$gte: moment().subtract(7, 'days').toDate()
}
}
})
SequelizeからOperatorsシンボルをインポートし、そのように使用する必要がありました。
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オブジェクトに解析し、入力のサニタイズに失敗した場合、文字列演算子を使用してObjectをSequelizeに注入できる場合があります。
(...)
セキュリティを強化するために、Sequelize.Opを使用し、文字列エイリアスにまったく依存しないことを強くお勧めします。 operatorAliasesオプションを設定することで、アプリケーションに必要なエイリアスを制限できます。特に、ユーザー入力をSequelizeメソッドに直接渡す場合は、忘れずにユーザー入力をサニタイズしてください。
Sequelize.literal()
を使用して、SQLで日付操作を実行することもできます。
次のコードはPostgresで動作しますが、他のシステムでも同様のことができると確信しています。
model.findAll({
where: {
start_datetime: {
$gte: Sequelize.literal('NOW() - INTERVAL "7d"'),
}
}
})