为了账号安全,请及时绑定邮箱和手机立即绑定

node.js中sequelize处理三张表的问题感激不尽

node.js中sequelize处理三张表的问题感激不尽

慕尼黑8549860 2019-09-05 20:00:32
在Mysql中定义了三张表Course表定义课程id主键title标题subtitle副标题intro介绍等等字段CourseVideo表(目前课程与Video一对一关系)id主键course_id课程IDvideo_url视频地址created_timeupdate_timeCourseSub课程订阅表(一个课程可能对应多条,一个用户订阅一个课是一条,一个用户也会订阅多个课)idcourse_id对应的课程IDuser_idstatus订阅状态on,off现在需要做一个课程列表,并且已知用户Id及user_id怎么能够(尽量只通过sequlize查询mysql去处理逻辑)生成一个list数据,返回一个列表,列表每一条包含包含idtitlesubtitlevideourlstatus(当前用户订阅了就是on,没订阅就是off,其他用户的订阅无关)想尽可能处理的优雅。请帮忙提供一下代码,查文档能想到findAll去查course表然后associationcoursevideo表,之后再findAll一下订阅表,使用where参数查出所有自己的数据。然后两个数组,在js层面去做结合。不知道有没有更好的办法,麻烦贴出代码
查看完整描述

2 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

分析的问题,
你的查询主体是课程Course,也就是通过CourseModal去查询,示例代码如下:
CourseModal.findAll({
attributes:['id','title','subtitle']
});
课程视频的数据CourseVideo,定义1对1的关系就好
CourseModal.hasOne(CourseVideoModal,{
as:'video',foreignKey:'course_id',sourceKey:'id'
})
//修改查询语句
CourseModal.findAll({
attributes:['id','title','subtitle'],
include:[
{
model:CourseVideoModal,
as:'video',
attributes:['video_url']
}
]
})
课程订阅的数据,CourseSub;课程和他是1对多的关系,需要定义1对多,使用hasMany
CourseModal.hasMany(CourseSubModal,{
as:'courseSubList',
foreignKey:'course_id',
sourceKey:'id'
})
//修改查询语句
CourseModal.findAll({
attributes:['id','title','subtitle'],
include:[
{
model:CourseVideoModal,
as:'video',
attributes:['video_url']
},
{
model:CourseSubModal,
as:'courseSubList',
attributes:['status','user_id']
},
]
})
//最后出来的数据list应该是下面的类似的结构
list=[
{
id,
title,
subtitle,
video:{
video_url
},
courseSubList:[
{
status,
user_id
}
]
}
]
//最后用js循环,处理下courseSubList
list.map(course=>{
let{courseSubList=[]}=course;
courseSubList=courseSubList.map(courseSub=>{
return{
status:courseSub.user_id==userId?'on':'off'
}
})
course.courseSubList=courseSubList;
returncourse;
})
不知道上面的实现算不算优雅,哈哈。
                            
查看完整回答
反对 回复 2019-09-05
  • 2 回答
  • 0 关注
  • 438 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信