2016-07-06 6 views
1

提供、私は次のモデルがあります:次のようにWorkingCalendarを通じてPeriodを取得しようとし、その後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; 
}; 

とを:私は取得しています

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

を次のエラー:未処理の拒否エラー:期間がWorkingCalendarに関連付けられていません!

ただし、逆の動作をします。

私の質問: WorkingCalendarPeriodを取得できないのはなぜですか?私はできることを確かめるために何をしなければならないのですか?

私はすでに、foreignKey属性を関連付けてasバインディングとしていますが、残念ながら役に立たないと思います。どんな助けも大歓迎です!

答えて

1

最終的にそれが見つかりました。 indexesclassMethods

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; 
}; 
と同じオブジェクトであるべきです
関連する問題