我怎么能在 sequelize 中写这个查询?
How could I write this query in sequelize?
考虑以下查询:
SELECT Film.FilmId FROM Films WHERE NOW() BETWEEN Film.StartDate AND Film.EndDate
这个查询怎么写成sequelize的?我知道使用 sequelize.fn('now') 我应该能够获得 NOW()
mariadb 函数,但是我应该如何告诉 sequelize 使用它作为 where 子句的左操作数?
这是一个解决方法。
Film.findOne({
attributes: ['FilmId'],
where: {
[Op.and]: [
{
StartDate: {
[Op.lte]: sequelize.literal('NOW()')
}
},
{
EndDate: {
[Op.gte]: sequelize.literal('NOW()')
}
}
]
}
});
使用 sequelize.where()
使用 sequelize.fn('NOW')
生成条件,然后使用 Op.between
query operator,传入 Film.StartDate
和 Film.EndDate
的列。
有关详细信息,请参阅文档中的 Advanced queries with functions (not just columns)。
// get the Op query operators
const { Op } = require("sequelize");
// ... your code
// use await to find one Film, in an async function
const film = await Film.findOne({
// just fetch the Film.FilmId
attributes: ['FilmId'],
where: {
// create where condition for NOW()
sequelize.where(sequelize.fn('NOW'), {
// BETWEEN Film.StartDate AND Film.EndDate
[Op.between]: [
sequelize.col('Film.StartDate'),
sequelize.col('Film.EndDate')
],
}),
},
});
考虑以下查询:
SELECT Film.FilmId FROM Films WHERE NOW() BETWEEN Film.StartDate AND Film.EndDate
这个查询怎么写成sequelize的?我知道使用 sequelize.fn('now') 我应该能够获得 NOW()
mariadb 函数,但是我应该如何告诉 sequelize 使用它作为 where 子句的左操作数?
这是一个解决方法。
Film.findOne({
attributes: ['FilmId'],
where: {
[Op.and]: [
{
StartDate: {
[Op.lte]: sequelize.literal('NOW()')
}
},
{
EndDate: {
[Op.gte]: sequelize.literal('NOW()')
}
}
]
}
});
使用 sequelize.where()
使用 sequelize.fn('NOW')
生成条件,然后使用 Op.between
query operator,传入 Film.StartDate
和 Film.EndDate
的列。
有关详细信息,请参阅文档中的 Advanced queries with functions (not just columns)。
// get the Op query operators
const { Op } = require("sequelize");
// ... your code
// use await to find one Film, in an async function
const film = await Film.findOne({
// just fetch the Film.FilmId
attributes: ['FilmId'],
where: {
// create where condition for NOW()
sequelize.where(sequelize.fn('NOW'), {
// BETWEEN Film.StartDate AND Film.EndDate
[Op.between]: [
sequelize.col('Film.StartDate'),
sequelize.col('Film.EndDate')
],
}),
},
});