我创建了2个模型:
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"});
第二次,我想在" cat1"创建一个userPreferenceCategoryTypes关联。像这样:
userPreferenceCategoryTypes.upsert({
name : "type1",
userPreferenceCategory : {
name : "cat1"
}
}, {
include: [ {
model : userPreferenceCategories
} ]
});
但这不符合消息:
Unhandled rejection SequelizeValidationError: notNull Violation: userPreferenceCategoryId cannot be null
实际上,sequelize似乎没有添加userPreferenceCategoyId attribut on sql request。如何在userPreferenceCategory中输入新的条目这个cat的foreignKey?我不会在系列剧中执行。
编辑1:
我找到了解决方案,但我不确定是否有更好的解决方法:/
userPreferenceCategory.find({where: {name: "cat1"}}).then(function (cat) {
UserPreferenceCategoryType.create({
name : "type1",
userPreferenceCategoryId : cat.getDataValue("id")
});
});
答案 0 :(得分:0)
它似乎是唯一的解决方案
不,因为当你使用include进行创建时,它会创建 关联的实例,不关联它。