创建模型(表)
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);