模型与Model Sequelize没有关联

我试图在表格之间build立一对多的关系: ExamExam_Questions ,使用Sequelize。

即使表格创build正确,我可以看到他们在PhpMyAdmin,我不断收到在控制台中的以下错误:

Error: exam_question is not associated to exam!

exam.js

 ... const ExamQuestion = require('./exam-question'); ... const Exam = sequelizeInstance.define("exam", { name: { type: Sequelize.STRING }, date: { type: Sequelize.DATE } }); // Build the model relations Exam.hasMany(ExamQuestion, { as: "Questions" }); 

exam-question.js

 const ExamQuestion = Sequelize.db.define("exam_question", { correct_answer: { type: Sequelize.STRING }, text: { type: Sequelize.STRING } }); module.exports = ExamQuestion; 

为了解决这个错误,我试过了:

 ExamQuestion.belongsTo(Exam); 

但是这并没有改变任何东西。

查询是:

 Exam.findAll({ include: [ExamQuestion] }) 

如何解决这个问题,并得到考试对象,包括他们的问题?

TL; DR

对于一些非直观的原因,这似乎正在发生,因为属性。 要解决这个问题,只需删除as属性:

 Exam.hasMany(ExamQuestion); 

修复方法

默认情况下,除去as属性后,Sequelize会自动添加以下方法: getExam_questionsaddExam_question等等。

他们看起来相当不好:骆驼和蛇的情况混在一起。

为了解决这个问题,我们可以在ExamQuestion模型选项(第三个参数)中轻松定义singularplural名称:

 const ExamQuestion = Sequelize.db.define("exam_question", { correct_answer: { type: Sequelize.STRING }, text: { type: Sequelize.STRING } }, { name: { singular: "question", plural: "questions" } }); 

这将决定Sequelize创build诸如getQuestionsaddQuestiongetExam_questions方法,而不是getExam_questionsaddExam_question