【发布时间】:2015-03-24 16:37:41
【问题描述】:
我不太确定如何称呼这个问题,但这是我的设置:
var AcademyModule = sequelize.define('academy_module', {
academy_id: {
type: DataTypes.INTEGER,
primaryKey: true
},
module_id: {
type: DataTypes.INTEGER,
primaryKey: true
},
module_module_type_id: DataTypes.INTEGER,
sort_number: DataTypes.INTEGER,
requirements_id: DataTypes.INTEGER
}, {freezeTableName: true,}
以下assosiation:
Requirements = sequelize.define('requirements', {
id: DataTypes.INTEGER,
value: DataTypes.STRING,
requirement_type_id: DataTypes.INTEGER
}, {freezeTableName: true});
AcademyModule.belongsTo(Requirements, {foreignKey: 'requirements_id'});
现在您可以从我的表设置中看到,我必须在 requirements 表中保存一行,然后使用插入的 id 插入到 academy_module 表中。
为此,我创建了以下内容:
add: function (requirements,academyModule,onSuccess, onError) {
var academyModule = academyModule;
if(requirements == null) {
AcademyModule.build(this.dataValues)
.save().ok(onSuccess).error(onError);
} else {
if(requirements.requirement_type_id == '1') {
requirements.value = requirements.module.id;
}
Requirements.create(requirements).then(function(createdReq) {
var associationPromises = [];
associationPromises.push(AcademyModule.create(this.dataValues));
return sequelize.Promise.all(associationPromises);
}).success(onSuccess).error(onError);
}
}
但是在then 函数中,我无法访问包含需要插入的值的academyModule 对象。
这对我来说是一个重复的问题,我真的很想知道如何连接,所以他们会自动连接而不用做小的 hacks
我已经搜索了文档,但我找不到上述的一个例子(我觉得这很奇怪,因为这是一种相当正常的情况)
简的方法
我尝试使用 Jan 的优雅方法解决它
但是我收到一条错误消息:
academy_module is not associated to requirements!
我的代码现在看起来像这样:
var academyModule = academyModule;
if(requirements == null)
{
AcademyModule.build(this.dataValues)
.save().ok(onSuccess).error(onError);
}
else
{
requirements.academy_module = academyModule;
Requirements.create(requirements, {
include: [AcademyModule]
});
}
有趣的是我有这样的联想:
AcademyModule.belongsTo(Requirements, {foreignKey: 'requirements_id'});
Requirements.hasOne(AcademyModule, {foreignKey: 'requirements_id'});
【问题讨论】:
标签: javascript mysql node.js sequelize.js