使用 sequelize 获取第三个模型的关联

use sequelize to get association for the third model

我正在尝试使用 sequelize 来获取关联。

我这里有 3 个模型,属性为:

学生 id, 名字, class, 等等

student_details studentId, subjectId

科目 id, 主题

我想获取学生的所有科目名称,我不想直接将信息存储在学生 table 中。有解决方法吗?

协会是:

models/Student.js

classMethods: {
      associate: (models) => {
        Students.studentDetails = Students.hasOne(models.f_student_details, { foreignKey: { name: 'studentId', allowNull: false }, as: 'studentDetails' });
      }
}

models/StudentDetails.js

classMethods: {
          associate: (models) => {
StudentDetails.belongsTo(models.subjects, { foreignKey: { name: 'subjectId', allowNull: true }, through: 'subjects' });

}

models/Subjects.js

classMethods: {
          associate: (models) => {
Subjects.hasOne(models.student_details, { foreignKey: { name: 'subjectId', allowNull: false }, as: 'studentSubject' });
}

方法调用:

db.students.findAll({
include: [ model: db.students]
})

目前,它 returns 只有 studentDetails。我想通过学生对象中的学生详细信息来设置主题。只是为了把问题说清楚!

你应该像这样使用嵌套包含:

Students.findAll({
    include: {
          model: db.studentDetails,
          include: [ db.subjects ]
    }
});

但是,您需要从以下模型中删除 "as" 密钥:

models/students.js

classMethods: {
      associate: (models) => {
        Students.studentDetails = Students.hasOne(models.f_student_details, { foreignKey: { name: 'studentId', allowNull: false } });
      }

models/subjects.js

classMethods: {
          associate: (models) => {
Subjects.hasOne(models.student_details, { foreignKey: { name: 'subjectId', allowNull: false } });
}

}

models/studentDetails.js

classMethods: {
          associate: (models) => {
StudentDetails.belongsTo(models.subjects, { foreignKey: { name: 'subjectId', allowNull: true } });

}

检查这个 Whosebug post