2016-07-06 7 views
1

При условии, у меня есть следующие модели:belongsTo - hasMany - получение экземпляра из 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; 
}; 

, а затем пытается получить Period через WorkingCalendar следующим образом:

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

я получаю следующая ошибка: Ошибка необработанного отказа: период не связан с WorkingCalendar!

Однако он работает наоборот.

Мой вопрос: Почему я не могу получить Period через WorkingCalendar? И что я должен сделать, чтобы убедиться, что смогу?

Я уже пробовал поместить атрибут foreignKey на ассоциацию так же, как и ссылку as, но безрезультатно. Любая помощь будет очень желанной!

ответ

1

Итак, наконец нашел. 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; 
};