在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对多,使用hasManyCourseModal.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循环,处理下courseSubListlist.map(course=>{let{courseSubList=[]}=course;courseSubList=courseSubList.map(courseSub=>{return{status:courseSub.user_id==userId?'on':'off'}})course.courseSubList=courseSubList;returncourse;})不知道上面的实现算不算优雅,哈哈。
添加回答
举报
0/150
提交
取消