sequelize :使用现有外键创建新条目 [英] sequelize : Create new entry with existing foreign key

查看:69
本文介绍了sequelize :使用现有外键创建新条目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了 2 个模型:

I create 2 models :

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 条目:

one time, I create an userPreferenceCategories entry :

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

第二次,我想在cat1"处创建一个 userPreferenceCategoryTypes 关联,如下所示:

in second time, I would like create an userPreferenceCategoryTypes associate at "cat1" like this :

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

但这不适用于消息:

Unhandled rejection SequelizeValidationError: notNull Violation: userPreferenceCategoryId cannot be null

其实sequelize好像没有在sql请求上添加userPreferenceCategoyId属性.如何在 userPreferenceCategoryTypes 中插入新条目 cat 的这个外键?我不会在连续剧中执行该操作.

In fact, sequelize does not seem to add userPreferenceCategoyId attribut on sql request. How can I insert new entry in userPreferenceCategoryTypes this foreignKey of cat ? I don't execute that on series.

编辑 1:

我找到了一个解决方案,但我不确定是否有更好的解决方案:/

I found a solution but I'm not sure if there had better : /

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

推荐答案

看来只能这样了

不,因为当您使用包含进行创建时,它会创建关联实例,而不是关联它.

No, because when you do a create with include, it will create the associated instance, not associate it.

这篇关于sequelize :使用现有外键创建新条目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆