2015-11-10 96 views
0

我已经创建了下面的表格:创建Sequelize关系/协会

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

下一页在我的数据库,我创建的结果之间的外键关联=> assessmentId和评估=> ID

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

results = { 
    name: 'bruce', 
    email: '[email protected]', 
    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); 
     } 
    }) 

我在想什么?我找不到任何有关如何实际保留相关表格数据的文档,只有关于如何获取关联表格数据的文档。

回答

0

我怀疑这不是正确的方式来做这种关系,但我发现如果我手动设置外键值它工作正常。

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; 
       }); 
     } 
    }); 

如果有人知道更好的方法来做到这一点,并不需要我手动设置外键值请让我知道。