如何在带有where子句的sequelize中使用嵌套包含?

How to use nested include in sequelize with where clause?

我想获取指定大学的成绩, 考试 table 有 startDateEndDatenoOfStudentscollage_id。 学生 table 有 examId & subject 结果 table 有 studentIdscoregrade。 我已经尝试在下面查询它 returns null for students 和 none for the exam 而且它一直在返回结果数据库中存在的所有数据,我只需要属于指定的大学所以这里有任何建议, 请

results.find({
   include: [{
      model: models.students,
      include: [{
         model: models.exam,
         as: 'exam',
         where:{collage_id:id}
      }],
      as: 'students'
   }]
});

Output:{
   "id": 1,
   "student_id":2,
   "score": 88,
   "grade" : B,
   "created_at": "2018-11-14T13:38:25.377Z",
   "updated_at": "2018-11-14T13:38:25.377Z",
   "students": null
}

Expected Output:{
   "id": 1,
   "student_id":2,
   "score": 88,
   "grade" : B,
   "created_at": "2018-11-14T13:38:25.377Z",
   "updated_at": "2018-11-14T13:38:25.377Z",
   "students": {
      "examId": 2
      "subject":
   },exam:{
      "startDate":Date, 
      "EndDate":date, 
      "noOfStudents" : 100
      "collage_id": 1
   }
}

我看不出你的问题有什么困惑。

  1. 根据你在 Students table 中的问题,我可以看到你 只有 examIdsubject。那么你如何 link Results table 与 Students table.

link Results table 和 Students table 你的学生 table 应该是 Students(id / studentId,examId,subject)

和协会 (link) results.belongsTo(students,{foreignKey:'id / studentId'})

做完这些你只能说,

results.find({
   include: [{
      model: models.students,
   }]
});
  1. 我能看到的第二个问题是你想在你的 Students table 和你的 [=22= 之间建立 关联 (link) ] table,但是你的Exams table 你只有列 startDateEndDatenoOfStudentscollage_id。那么这里的关联在哪里呢? link学生如何考试.

我认为 noOfStudents 列表示学生人数。如果你指的是学生的id。

你必须有一个协会Student.hasMany(Exam,{foreignKey:'noOfStudents'})

做完这些就可以查询了,

results.find({
   include: [{
      model: models.students,
      include: [{
         model: models.exam,
         where:{collage_id:id}
      }]
   }]
});

我不确定关键字 as,因为我对这一点也不熟悉。据我所知,您必须先在关联中使用关键字 as,然后再使用它作为查询,但我不确定。

并且还尝试跟踪您对此(控制台)的查询并查看它生成的内容。 =)