【问题标题】:creating Sequelize Relations/associations创建 Sequelize 关系/关联
【发布时间】:2015-11-13 07:48:40
【问题描述】:

我创建了以下表格:

user TABLE [id, name, email, dob, zipcode, created_on]
results TABLE [id, assessment_id, q_id, response, created_on]

接下来在我的数据库中,我在结果 => 评估 ID 和评估 => id 之间创建了一个外键关联

在我的代码中,我创建了包含我想要保存的所有信息的对象,它看起来像这样:

results = {
    name: 'bruce',
    email: 'kldf@sdklj.com',
    dob: 10/24/84,
    zipcode: '55555',
    responses: {
        {
            qId: 'S1Q01',
            response: 2
        }, {
            qId: 'S1Q02',
            response: 0
        }
    }
}

我的模型定义:

评估模型

module.exports = function(sequelize, DataTypes){
    var assessment = sequelize.define('assessments', {
        name: DataTypes.STRING,
        email: DataTypes.STRING,
        dob: DataTypes.DATE,
        zipcode: DataTypes.INTEGER,
        created_on: DataTypes.DATE
    });

    return assessment;
};

结果模型

module.exports = function(sequelize, DataTypes){
    var results = sequelize.define('results', {
        assessmentId: DataTypes.INTEGER,
        qId: DataTypes.STRING,
        response: DataTypes.STRING,
        created_on: DataTypes.DATE
    });

    return results;
};

型号索引

var Sequelize = require('sequelize'); 
var models = [
    'Assessment',
    'Result'
];


models.forEach(function(model) {
    module.exports[model] = sequelize.import(__dirname + '/' + model);
});

(function(m) {
    m.Assessment.hasMany(m.Result);
})(module.exports);

module.exports.sequelize = sequelize;

好的,根据我能找到的有限文档,我认为所有这些都是正确的。

最后在我的服务器上,我尝试接受 POST 请求并将结果保存在数据库中,但是只保存了评估模型,结果模型被删除了。

router.post('/assessment', function(req, res) {
    var response;
    var assessment = Assessment.create({
        name: req.body.name,
        email: req.body.email,
        dob: req.body.dob,
        zipcode: req.body.zipcode,
        created_on: new Date()
    })
    .then(function(res) {
        return function() {
            for(i=0; i<req.body.responses.length; i++) {
                response.build({
                    qId: req.body.responses[i].id,
                    response: req.body.responses[i].response,
                    created_on: new Date()
                });
                assessment.setResults(response);
            }
            res.send(200);
        }
    })

我错过了什么?我找不到任何关于如何实际持久化关联表数据的文档,只有关于如何获取关联表数据的文档。

【问题讨论】:

    标签: node.js express sequelize.js


    【解决方案1】:

    我怀疑这不是建立这种关系的正确方法,但我发现如果我手动设置外键值它可以正常工作。

    router.post('/assessment', function(req, res) {
        var assessment = Assessment.create({
            name: req.body.name,
            email: req.body.email,
            dob: req.body.dob,
            zipcode: req.body.zipcode,
            created_on: new Date()
        })
        .then(function(sourceData) {
            for(var i = 0; i < req.body.responses.length; i++) {
                var response = req.body.responses[i];
                var responseObj = Response.build({
                    assessmentId: sourceData.dataValues.id,
                    qId: response.id,
                    response: response.response,
                    created_on: new Date()
                });
                responseObj
                    .save()
                    .then(function() {
                        if(i === req.body.responses.length) {
                            res.send(200);
                            return;
                        }
                    })
                    .catch(function(err) {
                        res.send(500, { error: err });
                        return;
                    });
            }
        });
    

    如果有人知道不需要我手动设置外键值的更好方法,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      相关资源
      最近更新 更多