Sequelize查询返回空关联子数据,疑关联关系配置错误
问题解决:Sequelize关联查询返回空数组
你的关联关系配置确实存在错误,导致查询无法正确关联数据,以下是修正方案:
错误点分析
- AnalyticsSession的hasMany关联:
foreignKey参数应该指定AnalyticsEvent表中指向AnalyticsSession的外键字段,也就是sessionId,而不是id。 - AnalyticsEvent的belongsTo关联:参数完全搞反了——
foreignKey是当前模型(AnalyticsEvent)的外键字段sessionId,sourceKey是关联模型(AnalyticsSession)的主键id,原配置把两者颠倒了。
修正后的代码
Session模型
module.exports = (sequelize, DataTypes) => { class AnalyticsSession extends Model { static associate(models) { AnalyticsSession.hasMany(models.AnalyticsEvent, { foreignKey: "sessionId", // 修正:指向Event表中的sessionId字段 }); } } AnalyticsSession.init( { id: { autoIncrement: true, primaryKey: true, type: DataTypes.INTEGER(11).UNSIGNED, }, }, { sequelize, modelName: "AnalyticsSession", } ); return AnalyticsSession; };
Event模型
module.exports = (sequelize, DataTypes) => { class AnalyticsEvent extends Model { static associate(models) { AnalyticsEvent.belongsTo(models.AnalyticsSession, { foreignKey: "sessionId", // 修正:当前模型的外键字段 sourceKey: "id", // 修正:关联模型的主键字段 }); } } AnalyticsEvent.init( { id: { type: DataTypes.INTEGER(11).UNSIGNED, primaryKey: true, autoIncrement: true, }, sessionId: { allowNull: false, foreignKey: true, type: DataTypes.INTEGER(11).UNSIGNED, references: { model: "AnalyticsSession", key: "id", }, }, }, { sequelize, modelName: "AnalyticsEvent", defaultScope: {}, } ); return AnalyticsEvent; };
补充说明
hasMany关联中,foreignKey定义的是子表(AnalyticsEvent)中用于关联父表(AnalyticsSession)的字段belongsTo关联中,foreignKey是当前模型(子表)的外键字段,sourceKey是关联模型(父表)对应的主键字段
修正后重新执行查询,就能正确返回关联的Events数据了。
内容的提问来源于stack exchange,提问作者sidonaldson
相关产品推荐
相关产品推荐

