belongsTo - hasMany - 从 belongsTo 获取实例 - sequelize

belongsTo - hasMany - getting instance from belongsTo - sequelize

前提是我有以下型号:

module.exports = function (sequelize, DataTypes) {
  var WorkingCalendar = sequelize.define('WorkingCalendar', {
    date: DataTypes.DATEONLY,
    isWorking: DataTypes.BOOLEAN,
  }, {
      indexes: [{
        unique: true,
        fields: ['PeriodId', 'date']
      }]
    }, {
      classMethods: {
        associate: function (models) {
          WorkingCalendar.belongsTo(models.Period);
        }
      }
    });
  return WorkingCalendar;
};

module.exports = function(sequelize, DataTypes) {
  var Period = sequelize.define('Period', {
    name: DataTypes.STRING,
    numberOfPeriods: DataTypes.INTEGER
  }, {
    classMethods: {
      associate: function(models) {
        Period.hasMany(models.WorkingCalendar);
      }
    }
  });
  return Period;
};

然后尝试通过 WorkingCalendar 获取 Period,如下所示:

return models.WorkingCalendar
.findAll({
    attributes: [
        'PeriodId',
        'date'
    ],
    include: [
        { model: models.Period }
    ],
    group: ['date', 'PeriodId']
});

我收到以下错误:未处理的拒绝错误:期间与 WorkingCalendar 无关!

然而它确实以相反的方式起作用。

我的问题: 为什么我不能通过WorkingCalendar得到Period?我必须做什么才能确保我能做到?

我已经尝试将 foreignKey 属性和 as 绑定放在关联上,但遗憾的是无济于事。非常欢迎任何帮助!

终于找到了。 indexes 应该与 classMethods

在同一个对象中

错误

module.exports = function (sequelize, DataTypes) {
 var WorkingCalendar = sequelize.define('WorkingCalendar', {
    date: DataTypes.DATEONLY,
    isWorking: DataTypes.BOOLEAN,
  }, {
      indexes: [{
        unique: true,
        fields: ['PeriodId', 'date']
      }]
    }, {
      classMethods: {
        associate: function (models) {
          WorkingCalendar.belongsTo(models.Period);
        }
      }
    });
  return WorkingCalendar;
};

module.exports = function (sequelize, DataTypes) {
  var WorkingCalendar = sequelize.define('WorkingCalendar', {
    date: DataTypes.DATEONLY,
    isWorking: DataTypes.BOOLEAN,
  }, {
      indexes: [{
        unique: true,
        fields: ['PeriodId', 'date']
      }],
      classMethods: {
        associate: function (models) {
          WorkingCalendar.belongsTo(models.Period);
        }
      }
    });
  return WorkingCalendar;
};