我正在尝试使用sequelize来获取关联。
我这里有 3 个模型,其属性为:
学生 id、名称、类(class)等
学生详细信息 学生ID,科目ID
科目 ID,主题
我想获取学生的所有科目名称,但不想将信息直接存储在学生表中。有解决办法吗?
协会有:
模型/Student.js
classMethods: {
associate: (models) => {
Students.studentDetails = Students.hasOne(models.f_student_details, { foreignKey: { name: 'studentId', allowNull: false }, as: 'studentDetails' });
}
}
模型/StudentDetails.js
classMethods: {
associate: (models) => {
StudentDetails.belongsTo(models.subjects, { foreignKey: { name: 'subjectId', allowNull: true }, through: 'subjects' });
}
模型/Subjects.js
classMethods: {
associate: (models) => {
Subjects.hasOne(models.student_details, { foreignKey: { name: 'subjectId', allowNull: false }, as: 'studentSubject' });
}
方法调用:
db.students.findAll({
include: [ model: db.students]
})
现在,它仅返回学生详细信息。我想通过学生对象中的学生详细信息来设置科目。只是为了弄清楚问题!
最佳答案
您应该像这样使用嵌套包含:
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 } });
}
模型/subjects.js
classMethods: {
associate: (models) => {
Subjects.hasOne(models.student_details, { foreignKey: { name: 'subjectId', allowNull: false } });
}
}
模型/studentDetails.js
classMethods: {
associate: (models) => {
StudentDetails.belongsTo(models.subjects, { foreignKey: { name: 'subjectId', allowNull: true } });
}
检查这个 stackoverflow post
关于javascript - 使用sequelize获取第三个模型的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37962388/