使用 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
我正在尝试使用 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