javascript - Why are my Associations not being recognized and causing a SequelizeEagerLoadingError?
问题描述
I'm trying to design my models in a way to have association from the party table to both the Attendee and Item tables. This way I could query both tables using the Party_Id.
Clearly I'm not going upon this the right way...Any thoughts on where I'm going wrong with this?
Thanks in advance!
Party Model
module.exports = function(sequelize, DataTypes) {
var Party = sequelize.define("Party", {
eventName: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [1]
}
},
AuthenticationId: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [1]
}
},
eventAddress: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [1]
}
},
eventDate: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [1]
}
},
eventTime: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [1]
}
},
eventDescription: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [1]
}
},
displayName: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [1]
}
}
});
Party.associate = function(models) {
Party.hasMany(models.Attendee, {
foreignKey: {
allowNull: false
},
onDelete: "cascade"
});
};
return Party;
};
Attendee Model:
module.exports = function(sequelize, DataTypes) {
var Attendee = sequelize.define("Attendee", {
AuthenticationId: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [1]
}
},
displayName: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [1]
}
}
});
Attendee.associate = function(models) {
Attendee.hasMany(models.Item, {
foreignKey: {
allowNull: false
},
onDelete: "cascade"
});
};
Attendee.associate = function(models) {
Attendee.belongsTo(models.Party, {
foreignKey: {
allowNull: false
},
onDelete: "cascade"
});
};
return Attendee;
};
Item Model
module.exports = function(sequelize, DataTypes) {
var Item = sequelize.define("Item", {
itemName: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [1]
}
},
qtyRequested: {
type: DataTypes.INTEGER,
allowNull: false,
validate: {
len: [1]
}
},
qtyCommited: {
type: DataTypes.INTEGER,
allowNull: true,
validate: {
len: [1]
}
},
hostAdded: {
type: DataTypes.BOOLEAN,
allowNull: true,
validate: {
len: [1]
}
},
AuthenticationId: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [1]
}
},
displayName: {
type: DataTypes.STRING,
allowNull: false,
validate: {
len: [1]
}
}
});
Item.associate = function(models) {
Item.belongsTo(models.Attendee, {
foreignKey: {
allowNull: false
},
onDelete: "cascade"
});
};
return Item;
};
This is the query which is returning the error:
app.get("/parties/:id", (req, res) => {
db.Party.findOne({
where: { id: req.params.id },
include: [
{
model: db.Attendee,
include: [
{
model: db.Item
}
]
}
]
})
.then(party => {
console.log(party)
})
.catch(function(error) {
console.log(error);
});
});
Error:
SequelizeEagerLoadingError: Item is not associated to Attendee!
解决方案
真正的问题是:
Attendee.associate = function(models) {
Attendee.hasMany(models.Item, {
foreignKey: {
allowNull: false
},
onDelete: "cascade"
});
};
Attendee.associate = function(models) { // <---- This will override the upper one
Attendee.belongsTo(models.Party, {
foreignKey: {
allowNull: false
},
onDelete: "cascade"
});
};
解决方案 :
Attendee.associate = = function(models) {
Attendee.hasMany(models.Item, {
foreignKey: {
allowNull: false
},
onDelete: "cascade"
});
Attendee.belongsTo(models.Party, {
foreignKey: {
allowNull: false
},
onDelete: "cascade"
});
};
推荐阅读
- python - 如何在一个变量中同时在python中以读取和追加模式打开文件
- java - 如何使用java从文本文件中删除重复的单词
- python - 您将如何解释以下内容:Python 中的 [position*-1]?* 让我失望
- qt-creator - 如何从侧边栏中删除项目?
- node.js - 来自不同 Web 服务的嵌套 axios 请求
- multithreading - 在子进程中运行的线程没有按照设置的警报时间超时
- cucumber-java - PIT-Cucumber 插件未在功能文件中找到场景
- node.js - 如何使用 Electron 和 React 显示从文件中读取的数据?
- reactjs - 当我更新浏览器时,React-router 渲染组件
- c# - 如何在 IdentityServer4 中为声明添加角色?