egg-sequelize多对多,belongsToMany

本文详细介绍了如何在数据库中处理多对多关系,如学生和老师之间的关系,通过创建一个中间表TeacherStudent来存储关联数据。使用Egg.js的sequelize模型定义了Student、Teacher和TeacherStudent之间的belongstoMany关联。查询方面,展示了如何获取学生的所有老师以及老师的所有学生。示例代码展示了如何在控制器中实现这些查询操作。
摘要由CSDN通过智能技术生成
多对多: 学生和老师,一个老师有多个学生,一个学生有多个老师
要确定某条数据需要同时确定学生和老师的关系
一般需要第三张表进行记录,比如把某个学生的id和某个老师的id组合当成一行数据记录,来确定

以下代码进行简写

Student.associate = function (){
        // 与Teacher存在多对多关系,使用belongsToMany()
        app.model.Student.belongsToMany(app.model.Teacher, {
        	// 通过TeacherStudent模型对应的表查询
        	// foreignKey和Student匹配的值,再匹配otherKey的值
        	// 例如: student表的id和TeacherStudent表的studentId匹配上了
        	// 然后得到teacherId去和teacher表匹配得到的结果就是这个id的学生的老师
            through: app.model.TeacherStudent,
            // 注意驼峰还是下划线,
            // 模型配置里面underscored默认为true,把驼峰转换为下划线
            foreignKey: 'studentId', //这两个字段是主键或者是外键类型和两张表对应
            otherKey: 'teacherId'
        });
    }
return Student;
Teacher.associate = function(){
        app.model.Teacher.belongsToMany(app.model.Student, {
            through: app.model.TeacherStudent,
            foreignKey: 'teacherId',
            otherKey: 'studentId'
        });
    }
return Teacher;
TeacherStudent.associate = function(){}

return TeacherStudent;
// contro.js
async info(){
		const { ctx, app } = this;
		//学生有哪些老师
		let result = await app.m.Student.findAll({
		  include: {
			  model: app.m.Teacher
		  }
		  
		});
		ctx.body = result;

		// 每个老师有哪些学生
		// let result = await app.m.Teacher.findAll({
		//   include: {
		// 	  model: app.m.Student
		//   }
		  
		// });
		// ctx.body = result;
	}
总结:
多对多是固定的格式
表一模型.belongsToMany(表二模型, {
            through: 中间表模型,
            foreignKey: '在中间表里面和表一匹配的字段',
            otherKey: '在中间表里面和表二匹配的字段'
        });
查询还是
await app.m.Student.findAll({
	include: {
	  model: app.m.Teacher
	 }
});

链接: egg-sequelize 一对一,hasOne,一对多,hasMany,belongsTo理解.

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值