sequelize:使用现有外键创建新条目

时间:2016-09-30 09:39:58

标签: node.js sequelize.js

我创建了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")
    });
});

1 个答案:

答案 0 :(得分:0)

它似乎是唯一的解决方案

  

不,因为当你使用include进行创建时,它会创建   关联的实例,不关联它。