关联查询 多对多 (9)

创建模型(表)

 1 let Student = sequelize.define('student', {
 2   id: {
 3     type: Sequelize.INTEGER,
 4     primaryKey: true,
 5     autoIncrement: true,
 6   },
 7   name: {
 8     type: Sequelize.STRING,
 9     allowNull: false,
10     unique: true,
11   }
12 });
13 let Teacher = sequelize.define('teacher', {
14   id: {
15     type: Sequelize.INTEGER,
16     primaryKey: true,
17     autoIncrement: true,
18   },
19   name: {
20     type: Sequelize.STRING,
21     allowNull: false,
22     unique: true,
23   }
24 });
25 // 关系表
26 let Relation = sequelize.define('relation', {
27   studentId: {
28     type: Sequelize.INTEGER,
29     allowNull: false, // 不允许为空
30     references: { // 该字段为外键
31       model: Student, // 指定外键引用的表
32       key: 'id', // 外键引用的字段
33     }
34   },
35   teacherId: {
36     type: Sequelize.INTEGER,
37     allowNull: false, // 不允许为空
38     references: { // 外键
39       model: Teacher, // 指定外键引用的表
40       key: 'id', // 外键引用的字段
41     }
42   }
43 });
  • 建立学生表 student 和老师表 teacher 多对多的关系需要借助一张关系表 relation 

建立关系

1 // 一个学生属于多个老师
2 Student.belongsToMany(Teacher, { // 谁属于多个谁
3   through: Relation
4 });
5 // 一个老师属于多个学生
6 Teacher.belongsToMany(Student, { // 谁属于多个谁
7   through: Relation
8 });

 

创建表并插入数据

 1 ;(async () => {
 2   // 创建表并插入数据
 3   await sequelize.sync({force: true});
 4   await Student.create({
 5     id: 1,
 6     name: 'zs',
 7   });
 8   await Student.create({
 9     id: 2,
10     name: 'ls',
11   });
12   await Teacher.create({
13     id: 1,
14     name: '张三',
15   });
16   await Teacher.create({
17     id: 2,
18     name: '李四',
19   });
20   await Relation.create({ // 在关系表中创建学生表和老师表的关系
21     studentId: 1,
22     teacherId: 1,
23   });
24   await Relation.create({
25     studentId: 1,
26     teacherId: 2,
27   });
28   await Relation.create({
29     studentId: 2,
30     teacherId: 1,
31   });
32   await Relation.create({
33     studentId: 2,
34     teacherId: 2,
35   });
36 })();

关联查询

1   let s = await Student.findOne({
2     where: {
3       id: 1
4     },
5     include: { // 查询学生的时候将对应的老师也查询出来
6       model: Teacher
7     }
8   });
9   console.log(s.dataValues.teachers);
1   let t = await Teacher.findOne({
2     where: {
3       id: 1
4     },
5     include: { // 查询老师的时候将关联的学生查询出来
6       model: Student
7     }
8   });
9   console.log(t.dataValues.students);

 

posted @ 2021-11-07 14:46  霸哥yyds  阅读(87)  评论(0)    收藏  举报