如何在where子句的续集中使用嵌套include?

时间:2018-11-20 07:14:56

标签: postgresql include sequelize.js postgresql-9.5 sequelize-cli

我想获取指定大学的成绩, 考试表包含startDateEndDatenoOfStudentscollage_id。 学生表中有examIdsubject 结果表包含studentIdscoregrade。 我在下面的查询中尝试过此查询,该查询对学生返回null,对于考试不返回任何值,并且它一直返回结果数据库中存在的所有数据,我只需要属于指定的大学,所以在这里有任何建议

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 个答案:

答案 0 :(得分:0)

在您的问题中我看不到什么困惑。

  1. 根据您在Students table中的问题,我可以看到您只有examIdsubject。那么如何将Results表与Students表链接。

要将Results表与Students表链接,您的学生表应为Students(id / studentId,examId,subject)

和关联(链接)results.belongsTo(students,{foreignKey:'id / studentId'})

完成这些操作后,您只能说

results.find({
   include: [{
      model: models.students,
   }]
});
  1. 第二个问题,我看到的是您希望在Students表和Exams表之间建立关联(链接),但是在Exams表中形成您只有列startDateEndDatenoOfStudentscollage_id。那么,该协会在哪里?您如何将学生链接到考试

我认为noOfStudents列表示学生人数。如果您的意思是学生的身份证。

您必须具有关联Student.hasMany(Exam,{foreignKey:'noOfStudents'})

完成这些操作后,您将可以查询

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

我不确定关键字as,因为我对此还不陌生。据我所知,尽管我不确定,但在查询之前必须在关联中使用关键字as

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