模型与Model Sequelize没有关联
我试图在表格之间build立一对多的关系: Exam
和Exam_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_questions
, addExam_question
等等。
他们看起来相当不好:骆驼和蛇的情况混在一起。
为了解决这个问题,我们可以在ExamQuestion
模型选项(第三个参数)中轻松定义singular
和plural
名称:
const ExamQuestion = Sequelize.db.define("exam_question", { correct_answer: { type: Sequelize.STRING }, text: { type: Sequelize.STRING } }, { name: { singular: "question", plural: "questions" } });
这将决定Sequelize创build诸如getQuestions
和addQuestion
之getExam_questions
方法,而不是getExam_questions
和addExam_question
。