在where子句中对hasMany关联的属性进行序列化过滤

问题描述

我有以下型号:

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 }
    }
  }]