я не был вполне уверен, что назвать этот вопрос, но здесь моя установка:сохранение sequelize несколько объектов, которые assosiates
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'});
Теперь, как вы можете видеть из моего table мне нужно было бы сохранить строку в таблице 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
я разведку в документации, но я havnt смог найти один пример выше (который я нашел довольно странное, видя, как это довольно нормальная ситуация)
метод Яна
Я пытался решить, используя изящный метод Яна
Однако я получаю сообщение об ошибке сказав:
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'});
Эй @Jan прежде всего поблагодарить Вас за Ответ: Я пытаюсь решить это, используя ваш элегантный способ, но я получаю проблему с обновлением ive, мой ответ мог бы вы взглянуть :)? –
Вам необходимо настроить обратную связь (Требования hasMany/hasOne AcademyModule) –
ive udated мой код, чтобы вы могли видеть требования, добавленные в него, все еще не добавляются (однако после внесения изменений он вставляет в таблицу требований) –