javascript - Sequelize : A is not associated to B"nodejs

标签 javascript mysql node.js express sequelize.js

我有两种模型,一种是问题,另一种是答案,每个答案都有一个 question_id,问题可以有多个答案。
我想在我的 json 响应中包含每个问题的所有答案,但我一直收到错误

"message": "answer is not associated to question!"*


以下是问题模型:-
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,
            allowNull: false
        },
        question_text: {
            type: Sequelize.STRING,
            allowNull: false
        },
        question_required: {
            type: Sequelize.BOOLEAN,
        },
        formpage_no: {
            type: Sequelize.DOUBLE,
            allowNull: false
        },
        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, {
            foreignKey: 'question_id',
            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,
            primaryKey: true,
            autoIncrement: true
        },
        question_id: { // each answer has one questionId
            type: Sequelize.INTEGER,
            allowNull: false,
            references: {
                model: 'questions',
                key: 'question_id'
            },
            onUpdate: 'CASCADE',
            onDelete: 'CASCADE',
        },
        question_no: {
            type: Sequelize.DOUBLE,
            allowNull: true
        },
        answer_no: {
            type: Sequelize.DOUBLE,
            allowNull: true
        },
        answer_text: {
            type: Sequelize.STRING,
            allowNull: false
        },
        answer_icon: {
            type: Sequelize.STRING,
            allowNull: true
        },
        answer_reply: {
            type: Sequelize.STRING,
            allowNull: true
        },
        answer_logic: {
            type: Sequelize.STRING,
            allowNull: true
        },
        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
    });
    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;
这是我的问题 Controller
// 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)
  }
})

关于javascript - Sequelize : A is not associated to B"nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63727564/

相关文章:

node.js - fs.readFile 后关闭文件,清零

node.js - 在 NPM 包内声明全局命令

javascript - 将值从 php 回显到 javascript

javascript - Mac 上的 Chrome 不会启动 WebDAV Word 编辑

javascript - 如何创建延迟的悬停 Action ,如果用户在时间到之前离开则不会执行? AngularJS

javascript - ng-model 在输入和显示时操纵值

mysql - SQL 添加不同表中出现的次数

mysql - 使用 MySQL Workbench 通过 EC2 实例连接到 Amazon RDS 实例

node.js - 引用错误: [client_secret] is not defined. NodeJS Passport-fb

mysql 对特定单词的全文搜索失败