sequlize 多表查询关系怎么定义?

发布于 2022-09-11 18:58:28 字数 1196 浏览 13 评论 0

脑壳疼
现在有这几个表
课程表:id,coursename....
老师表:id,name...
班级表:id,name...
课程安排表:id,cid(课程表的id),tid(任课老师的id),classid(教学班级的id).....

我自己里理的时候,大概 课程表 老师表 班级表都与 课程安排表 是1对n的关系。
但是如果都写成hash many的时候,就无法联合这么多进行查询
我该这么定义他们的关系?

course.hasMany(syllabus,{foreignKey:'cid', targetKey:'id'});
teachers.hasMany(syllabus,{foreignKey:'tid', targetKey:'id'});

这是我起初定义的两个关系,
但是用

  tables.course.findAll({
    where:{
        id:1
    },
    include:{
        model:tables.syllabus,
      },
  }).then(result => {
    response = responseModel(0,result[0]);
    res.json(response);
  });

查询是可以的,但是无法联合teachers表查询,会报 teachers和coures没有 关系错误。

我想得到的是这样的结果(暂时没加进班级表)

db.query(`select * from syllabus inner join course on syllabus.cid=course.id inner join teachers on syllabus.tid= teachers.id `).then(result => {
      console.log(result[0]);
      
      response = responseModel(0,result[0]);
      res.json(response);
    });
//sql语句
select * from syllabus inner join course on syllabus.cid=course.id inner join teachers on syllabus.tid= teachers.id

求指导用sequlize的方法怎么定义这些表和怎么执行联合查询?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只怪假的太真实 2022-09-18 18:58:28
let course = require('./table/course');
let syllabus = require('./table/syllabus');
let teachers = require('./table/teachers');
let classes = require('./table/classes');

course.belongsToMany(teachers, {through:syllabus, foreignKey:'cid', otherKey:'tid'});
teachers.belongsToMany(course, {through:syllabus, foreignKey:'tid', otherKey:'cid'});

teachers.belongsToMany(classes, {through:syllabus, foreignKey:'tid', otherKey:'classid'});
classes.belongsToMany(teachers, {through:syllabus, foreignKey:'classid', otherKey:'tid'});

course.belongsToMany(classes, {through:syllabus, foreignKey:'cid', otherKey:'classid'});
classes.belongsToMany(course, {through:syllabus, foreignKey:'classid', otherKey:'cid'});

自问自答了,再看了一边sequlize的文档,好像明白了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文