鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ sequelize多對(duì)多查詢?cè)趺从?[已解決]

sequelize多對(duì)多查詢?cè)趺从?[已解決]

業(yè)務(wù)背景

有三張表關(guān)系如下:

  • 老師表teacher:id,name
  • 學(xué)生表student:id,name
  • 老師學(xué)生關(guān)系表relation:id,teacher_id,student_id

以上三張表已經(jīng)在mysql中建立好了外鍵關(guān)系

問(wèn)題

sequelize里面怎么查詢某個(gè)老師對(duì)應(yīng)的所有學(xué)生信息呢?
根據(jù)官方文檔的來(lái),只能查進(jìn)行兩個(gè)表的聯(lián)合查詢,這涉及到3個(gè)表的,就搞不出來(lái)啦......

代碼

db.teacher.hasMany(db.relation,{
    foreignKey:`teacher_id`
});
db.relation.hasMany(db.student,{
    foreignKey:`id`,
    targetKey:'student_id`
})
//接下來(lái)怎么做???????????~~~
回答
編輯回答
不將就

@leftstick
向你請(qǐng)教一個(gè)問(wèn)題。
我有個(gè)用戶表,user----userId
有個(gè)話題表,topic ----topicId
現(xiàn)在做一個(gè)關(guān)注表,就是用戶關(guān)注了某一些話題: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'})

這是我查詢某個(gè)人的關(guān)注話題,并且從topic中獲取話題的詳細(xì)信息。比如title,描述等等。。。

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

得到的結(jié)果

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

但我想要的數(shù)據(jù)是,關(guān)注的話題套入到topics這個(gè)數(shù)組中。。。

我想請(qǐng)問(wèn)在這種情況如何解決呢??
2,或者我建立的表關(guān)聯(lián)是否用如下建立

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

多對(duì)多,建立聯(lián)系,怎么操作這數(shù)據(jù)呀?

2018年7月5日 06:40
編輯回答
舊顏

我之前是這么做的:

//定義從teacher到student的關(guān)聯(lián)關(guān)系
db.teacher.belongsToMany(db.student, {
  through: db.relation,
  foreignKey: 'teacher_id'
})

//定義從student到teacher的關(guān)聯(lián)關(guān)系
db.student.belongsToMany(db.teacher, {
  through: db.relation,
  foreignKey: 'student_id'
})

//查詢teacher表,指定一個(gè)teacher id
db.teacher.findAll({
  include: [
    {
      model: db.student
    }
  ],
  where: {
    id: "某一個(gè)teacher id"
  }
})
祝你成功!
2017年4月29日 10:31
編輯回答
淺時(shí)光

樓主請(qǐng)問(wèn)一下,多對(duì)多關(guān)系中你是如何添加數(shù)據(jù)的?
如果需要添加一個(gè)學(xué)生,老師的數(shù)據(jù)已經(jīng)存在了。如何添加這個(gè)學(xué)生和學(xué)生與老師的關(guān)系

2018年1月9日 20:13