sequelize多对多查询怎么用?[已解决]

发布于 2022-09-07 11:32:57 字数 645 浏览 10 评论 0

业务背景

有三张表关系如下:

  • 老师表teacher:id,name
  • 学生表student:id,name
  • 老师学生关系表relation:id,teacher_id,student_id

以上三张表已经在mysql中建立好了外键关系

问题

sequelize里面怎么查询某个老师对应的所有学生信息呢?
根据官方文档的来,只能查进行两个表的联合查询,这涉及到3个表的,就搞不出来啦......

代码

db.teacher.hasMany(db.relation,{
    foreignKey:`teacher_id`
});
db.relation.hasMany(db.student,{
    foreignKey:`id`,
    targetKey:'student_id`
})
//接下来怎么做???????????~~~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

挥剑断情 2022-09-14 11:32:57

我之前是这么做的:

//定义从teacher到student的关联关系
db.teacher.belongsToMany(db.student, {
  through: db.relation,
  foreignKey: 'teacher_id'
})

//定义从student到teacher的关联关系
db.student.belongsToMany(db.teacher, {
  through: db.relation,
  foreignKey: 'student_id'
})

//查询teacher表,指定一个teacher id
db.teacher.findAll({
  include: [
    {
      model: db.student
    }
  ],
  where: {
    id: "某一个teacher id"
  }
})

祝你成功!

风筝有风,海豚有海 2022-09-14 11:32:57

@leftstick
向你请教一个问题。
我有个用户表,user----userId
有个话题表,topic ----topicId
现在做一个关注表,就是用户关注了某一些话题:like
目前我的解决方案是,额外建立一张表

const like = Model.define('like', {
  userId: {
    type: sequelize.INTEGER,
    allowNull: true,
  },
  topicId:{
    type: sequelize.INTEGER,
    allowNull: false
  }
}, {
  tableName: 'like',
  timestamps: true,
  updatedAt: false
})

like.hasMany(Topic,{foreignKey:'topicId',sourceKey:'topicId'})

这是我查询某个人的关注话题,并且从topic中获取话题的详细信息。比如title,描述等等。。。

await LikeModel.findAll({
        include:{
          model:TopicModel,
        },
        attributes:{exclude:['id','createdAt']}
      }).then(res=>{
        console.log(res)
        ctx.body = res
      })

得到的结果

[
    {
        "userId": "1",
        "topicId": 1,
        "topics": [
            {
                "topicId": 1,
                "title": "1212",
                "des": "2332"
            }
        ]
    },
    {
        "userId": "1",
        "topicId": 2,
        "topics": [
            {
                "topicId": 2,
                "title": "1212",
                "des": "2332"
            }
        ]
    }
]

但我想要的数据是,关注的话题套入到topics这个数组中。。。

我想请问在这种情况如何解决呢??
2,或者我建立的表关联是否用如下建立

User.belongsToMany(Topic,{through:'like',foreignKey:'unionId',otherKey:'topicId'})
Topic.belongsToMany(User,{through:'like',foreignKey:'topicId',otherKey:'unionId'})

多对多,建立联系,怎么操作这数据呀?

你是我的挚爱i 2022-09-14 11:32:57

楼主请问一下,多对多关系中你是如何添加数据的?
如果需要添加一个学生,老师的数据已经存在了。如何添加这个学生和学生与老师的关系

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文