如何解决续集:A未与B“ nodejs关联
我有两个模型,其中一个是Question,另一个是Answer,每个答案都有一个question_id,而一个问题可以有一个以上的答案。
我想在我的json响应中包含每个问题的所有答案,但我一直遇到错误
“邮件”:“答案与问题无关!” *
下面是问题模型:-
module.exports = (sequelize,Sequelize) => {
const Question = sequelize.define("question",{
question_id: {
type: Sequelize.INTEGER,primaryKey: true,autoIncrement: true
},question_no: {
type: Sequelize.DOUBLE,allowNull: false
},question_text: {
type: Sequelize.STRING,question_required: {
type: Sequelize.BOOLEAN,},formpage_no: {
type: Sequelize.DOUBLE,med_id: {
type: Sequelize.INTEGER,allowNull: false,references: {
model: 'medforms',key: 'med_id'
},onUpdate: 'CASCADE',onDelete: 'CASCADE'
},med_name: {
type: Sequelize.STRING,allowNull: true
},version_no: {
type: Sequelize.STRING,allowNull: false
}
},{
freezeTableName: false,// true: if we want to make table name as we want else sequelize will make them prural
underscored: true // underscored: true indicates the the column names of the database tables are snake_case rather than camelCase
});
Question.associate = function (models) {
Question.hasMany(models.answer,{
foreignKey: 'question_id',as: 'answers'
});
Question.hasMany(models.helpbox,as: 'helpboxes'
});
// in future each question could have more than one document text
};
return Question;
};
以下是我的答案模型:-
module.exports = (sequelize,Sequelize) => {
const Answer = sequelize.define("answer",{
answer_id: {
type: Sequelize.INTEGER,question_id: { // each answer has one questionId
type: Sequelize.INTEGER,references: {
model: 'questions',key: 'question_id'
},onDelete: 'CASCADE',answer_no: {
type: Sequelize.DOUBLE,answer_text: {
type: Sequelize.STRING,answer_icon: {
type: Sequelize.STRING,answer_reply: {
type: Sequelize.STRING,answer_logic: {
type: Sequelize.STRING,// true: if we want to make table name as we want else sequelize will make them prural
underscored: true // underscored: true indicates the the column names of the database tables are snake_case rather than camelCase
});
Answer.associate = function (models) {
Answer.belongsTo(models.question,{
as: 'questions'
});
// in future each question could have more than one document text
};
return Answer;
};
下面是index.js类:-
var Sequelize = require('sequelize');
var env = process.env.NODE_ENV || 'development';
var config = require("../config/config.json")[env];
var db = {};
if (config.use_env_variable) {
var sequelize = new Sequelize(process.env[config.use_env_variable]);
} else {
var sequelize = new Sequelize(config.database,config.username,config.password,config);
}
db.Sequelize = Sequelize;
db.sequelize = sequelize;
// Models
db.medform = require("./medform.model.js")(sequelize,Sequelize);
db.version = require("./version.model.js")(sequelize,Sequelize);
db.question = require("./question.model.js")(sequelize,Sequelize);
db.helpbox = require("./helpbox.model.js")(sequelize,Sequelize);
db.answer = require("./answer.model.js")(sequelize,Sequelize);
db.document = require("./document.model.js")(sequelize,Sequelize);
module.exports = db;
这是我的问题控制者
// Retrieve Question including answers from the database:
exports.getAllQuesData = (req,res) => {
const version_no = req.query.version_no;
const med_id = req.query.med_id;
var condition = [{ "version_no": version_no },{ "med_id": med_id }];
Question.findAll({
include: [
{
model: answer,as: 'answers'
}
],where: condition
})
.then(data => {
res.send(data);
})
.catch(err => {
res.status(500).send({
message:
err.message || "Some error occurred while retrieving questions."
});
});
};
请帮助我我做错了,为什么我的协会不起作用
解决方法
您没有注册模型关联。看看我的answer如何做到
Object.keys(db).forEach(function (modelName) {
if (db[modelName].associate) {
db[modelName].associate(db)
}
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。