2016-09-30 3 views
0

создать 2 модели иностранного:sequelize: Создать новую запись с существующим ключом

userPreferenceCategories = sequelize.define("userPreferenceCategories", { 
    id : { 
     type   : Sequelize.INTEGER, 
     autoIncrement : true, 
     primaryKey : true, 
     allowNull  : false 
    }, 
    name : { 
     type  : Sequelize.STRING, 
     allowNull : false 
    } 
}, { 
    indexes: [ 
     { 
      unique : true, 
      fields : ["name"] 
     } 
    ], 
    freezeTableName : true 
}); 

и

userPreferenceCategoryTypes = sequelize.define("userPreferenceCategoryTypes", { 
    id : { 
     type   : Sequelize.INTEGER, 
     autoIncrement : true, 
     primaryKey : true, 
     allowNull  : false 
    }, 
    name : { 
     type  : Sequelize.STRING, 
     allowNull : false 
    } 
}, { 
    indexes: [ 
     { 
      unique : true, 
      fields : ["name", "userPreferenceCategoryId"] 
     } 
    ], 
    freezeTableName : true 
}); 

С соотношением:

userPreferenceCategoryTypes.belongsTo(userPreferenceCategories, { 
    onDelete : "cascade", 
    onUpdate : "cascade", 
    foreignKey : { 
     field  : "userPreferenceCategoryId", 
     allowNull : false, 
    } 
}); 

одно время, я создаю запись userPreferenceCategories :

userPreferenceCategories.upsert({name : "cat1"}); 

во второй раз, я хотел бы создать адъюнктом userPreferenceCategoryTypes на "cat1", как это:

userPreferenceCategoryTypes.upsert({ 
    name : "type1", 
    userPreferenceCategory : { 
     name : "cat1" 
    } 
}, { 
    include: [ { 
     model : userPreferenceCategories 
    } ] 
}); 

, но это не работает с сообщением:

Unhandled rejection SequelizeValidationError: notNull Violation: userPreferenceCategoryId cannot be null 

В самом деле, sequelize делает похоже, не добавляет атрибут userPreferenceCategoyId по запросу sql. Как я могу вставить новую запись в userPreferenceCategoryTypes этого foreignKey cat? Я не выполняю это по серии.

EDIT 1:

Я нашел решение, но я не уверен, что лучше:/

userPreferenceCategory.find({where: {name: "cat1"}}).then(function (cat) { 
    UserPreferenceCategoryType.create({ 
     name : "type1", 
     userPreferenceCategoryId : cat.getDataValue("id") 
    }); 
}); 

ответ

0

Кажется, это единственное решение

Нет, потому что, когда вы создаете с помощью include, он создаст связанный экземпляр , а не свяжет его.

Смежные вопросы