问题描述
我有以下型号:
const Machine = sequelize.define('Machine',{ name: DataTypes.STRING });
const Review = sequelize.define('Review',{ ReviewDate: DataTypes.DATEONLY });
Review.belongsTo(Machine);
Machine.hasMany(Review);
现在,我要获取上次审核日期早于3个月的所有计算机。
const reviewOverdueDate = new Date();
reviewOverdueDate.setMonth(reviewOverdueDate.getMonth() - 3);
const request = {
include: [{
model: Review,order: [
["ReviewDate","DESC"]
],limit: 1
}],where: {
// this obvIoUsly does not work,because the included Review is an array
// but maybe there is some Syntax to access the first entry in that array?
'$Review.ReviewDate$': { [Op.gt]: reviewOverdueDate }
}
Machine.findAndCountAll(request)
如何编写适当的where子句以实现目标?有没有一种使用$nested.column$
语法访问列表/数组的方法?
我在where子句中使用续集字面量
where: {
Sequelize.literal(`('${reviewOverdueDate.toISOString()}' > (SELECT "ReviewDate" FROM
"Review" WHERE "Review"."MachineID" = "Machine"."ID" ORDER BY
"Review"."ReviewDate" DESC LIMIT 1))`)
}
但是我喜欢使用序列化表示法并使用hasMany关联。
解决方法
您是否尝试过在include中使用where子句?
const request = {
include: [{
model: Review,order: [
["ReviewDate","DESC"]
],limit: 1,where: {
ReviewDate: { [Op.gt]: reviewOverdueDate }
}
}]