I have the following models and assosiations:
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,
instanceMethods: {
retrieveAll: function (academy_id,onSuccess, onError) {
AcademyModule.find({include: [{all: true}],where: {academy_id: academy_id}}, {})
.success(onSuccess).error(onError);
},
retrieveById: function (academy_id, onSuccess, onError) {
AcademyModule.findAll({include: [{all: true}],where: {academy_id: academy_id}}, {})
.success(onSuccess).error(onError);
},
add: function (requirements,academyModule,onSuccess, onError) {
var academyModule = academyModule;
if(requirements == null)
{
AcademyModule.build(this.dataValues)
.save().ok(onSuccess).error(onError);
}
else
{
var am = {academy_id: academyModule.academy_id, module_id: academyModule.module_id, sort_number: academyModule.sort_number}
AcademyModule.build(am);
requirements.academy_module = am;
Requirements.create(requirements, {
include: [AcademyModule]
});
}
},
updateById: function (quote_id, onSuccess, onError) {
var id = quote_id;
var quotes = this.quotes;
AcademyModule.update({quotes: quotes}, {where: {id: id}})
.success(onSuccess).error(onError);
},
removeById: function (module_id,academy_id, onSuccess, onError) {
AcademyModule.destroy({where: {academy_id: academy_id, module_id: module_id}}).success(onSuccess).error(onError);
}
}
}
),
Module = sequelize.define('module', {
id: DataTypes.INTEGER,
name: DataTypes.STRING,
description: DataTypes.STRING,
category_id: DataTypes.STRING,
module_type_id: DataTypes.STRING,
gives_score: DataTypes.INTEGER,
duration: DataTypes.STRING,
price: DataTypes.STRING
},{freezeTableName:true}),
Academy = sequelize.define('academy', {
id: DataTypes.INTEGER,
name: DataTypes.STRING,
created: DataTypes.DATE,
description: DataTypes.STRING,
rating: DataTypes.STRING,
status_id: DataTypes.INTEGER,
organization_id: DataTypes.INTEGER,
division_id: DataTypes.INTEGER,
icon: DataTypes.STRING
}, {
freezeTableName: true}),
Requirements = sequelize.define('requirements', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
value: DataTypes.STRING,
requirement_type_id: DataTypes.INTEGER
}, {
freezeTableName: true}),
ModuleType = sequelize.define('module_type', {
id: DataTypes.INTEGER,
name: DataTypes.STRING,
color: DataTypes.STRING,
icon: DataTypes.STRING,
type_description: DataTypes.STRING
},{freezeTableName:true});
AcademyModule.belongsTo(Module, {foreignKey: 'module_id'});
AcademyModule.belongsTo(Academy, {foreignKey: 'academy_id'});
AcademyModule.belongsTo(Requirements, {foreignKey: 'requirements_id'});
AcademyModule.belongsTo(ModuleType, {foreignKey:'module_module_type_id'});
Requirements.hasOne(AcademyModule, {foreignKey: 'requirements_id'});
Now as you can see i have a relationship between AcademyModule & Requirements
The thing is a requirements row has to be created before the academyModule seeing as the AcademyModule's requirements_id has to be filled.
In order to fix this i created the following add method:
var academyModule = academyModule;
if(requirements == null)
{
AcademyModule.build(this.dataValues)
.save().ok(onSuccess).error(onError);
}
else
{
var am = {academy_id: academyModule.academy_id, module_id: academyModule.module_id, sort_number: academyModule.sort_number}
AcademyModule.build(am);
requirements.academy_module = am;
Requirements.create(requirements, {
include: [AcademyModule]
});
}
However here it only inserts a row into the requirements table and not in the academy_module table.
So my question is what could have gone wrong? and how do i make sure it inserts in both tables?