Как использовать вложенные include в sequelize с предложением where? - PullRequest
0 голосов
/ 20 ноября 2018

Я хотел бы получить результаты указанного колледжа, в таблице экзамена есть startDate, EndDate, noOfStudents и collage_id.Таблица учеников имеет examId & subject Таблица результатов имеет studentId, score и grade.Я пробовал этот приведенный ниже запрос, он возвращает ноль для студентов и ни одного для экзамена, также он возвращал все данные, которые присутствуют в базе данных результатов, мне нужно только принадлежать к указанному колледжу, поэтому любые предложения здесь, пожалуйста

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 голосов
/ 21 ноября 2018

Я вижу несколько смущений в вашем вопросе.

  1. По вашему вопросу в вашем Students table Я вижу, что у вас есть только столбцы examId & subject,так как связать таблицу Results с таблицей Students.

Чтобы связать таблицу Results с таблицей Students, ваша таблица учеников должна быть Students(id / studentId,examId,subject)

иассоциация (ссылка) results.belongsTo(students,{foreignKey:'id / studentId'})

После этого вы можете сказать только это,

results.find({
   include: [{
      model: models.students,
   }]
});
вторая проблема, которую я вижу, вы хотите связь (связь) между вашей Students таблицей и вашей Exams таблицей, но ваша Exams таблица у вас есть только столбцы startDate, EndDate, noOfStudents и collage_id.Так при чем здесь ассоциация?Как вы связываете ученик с экзамен .

Я думаю, что столбец noOfStudents означает количество студентов.Если вы имеете в виду идентификатор студента.

У вас должна быть ассоциация Student.hasMany(Exam,{foreignKey:'noOfStudents'})

После этого вы сможете запросить,

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

Я не уверен насчет ключевого слова as, так как я также новичок в этом немного.насколько я знаю, вы должны использовать ключевое слово as в своих ассоциациях, прежде чем использовать его в своем запросе, хотя я не уверен в этом.

А также попытаться отследить ваш запрос для этого (консоль)и посмотрим, что он генерирует.=)

...