Mysql Sequelize:对联接表使用include
我有4种型号:Mysql Sequelize:对联接表使用include,mysql,join,many-to-many,sequelize.js,Mysql,Join,Many To Many,Sequelize.js,我有4种型号:User、Skill、SkillToLearn和SkillToTeach。SkillToLearn和skilltoTech包含两列userId和skillId,用于跟踪用户(userId)想要学习或教授的技能(由skillId提供) 我的目标是使用Sequelize的include语句,这样我就可以返回所有用户的数据,包括他们正在学习的技能列表和他们正在教授的技能列表。我希望得到如下类似的答复: [ { "id": 1, "username"
User
、Skill
、SkillToLearn
和SkillToTeach
。SkillToLearn
和skilltoTech
包含两列userId
和skillId
,用于跟踪用户(userId)想要学习或教授的技能(由skillId提供)
我的目标是使用Sequelize的include
语句,这样我就可以返回所有用户的数据,包括他们正在学习的技能列表和他们正在教授的技能列表。我希望得到如下类似的答复:
[
{
"id": 1,
"username": "janedoe",
"skillsLearning": [
{
"skillId": 1,
"name": "arts"
}
],
"skillsTeaching": [
{
"skillId": 2,
"name": "cooking"
}
]
}
]
然而,我得到了以下回应:
[
{
"id": 1,
"username": "janedoe",
"skillsLearning": [
{
"skillId": 1,
"Skill": {
"name": "arts"
}
}
],
"skillsTeaching": [
{
"skillId": 2,
"Skill": {
"name": "cooking"
}
}
]
}
]
我尝试将SkillToLearn
和skilltotach
包括在SkillToLearn
中,但我得到一个错误,即Skill
与用户
没有关联。我不确定我的模式和关联是否不正确
User.js
const User=sequelize.define(“用户”{
用户名:{
类型:DataTypes.STRING,
allowNull:错,
独一无二:真的
},
电邮:{
类型:DataTypes.STRING,
allowNull:错,
独一无二:没错,
验证:{
isEmail:是的
}
},
密码:{
类型:DataTypes.STRING,
allowNull:错误
},
说明:{
类型:DataTypes.TEXT
}
}, {
冻结表名称:true
});
User.associate=功能(模型){
User.hasMany(models.SkillToLearn{
如:“技能学习”,
onDelete:“级联”,
foreignKey:“用户ID”,
sourceKey:“id”
});
User.hasMany(models.skilltoTech{
如:“熟练的偷窃”,
onDelete:“级联”,
foreignKey:“用户ID”,
sourceKey:“id”
});
};代码>我认为问题在于你把一个多对多关系变成了两个一对多关系。您需要定义一个关系,如User.belongToMany(Skill,{through:SkillToLearn,as:'skillsToLearn'})
更多信息。