Mysql Sequelize:对联接表使用include

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"

我有4种型号:
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'})
更多信息。