2016-07-06 63 views
1

提供我有以下型號:屬於關聯 - 的hasMany - 來自屬於關聯越來越實例 - 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綁定上,但無濟於事。任何幫助將非常歡迎!

回答

1

於是終於找到了。 該indexes應該在相同的對象classMethods

WRONG

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

RIGHT

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