【问题标题】:sequelize : Create new entry with existing foreign keysequelize :使用现有外键创建新条目
【发布时间】:2016-09-30 23:39:51
【问题描述】:

我创建了 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似乎并没有在sql请求上添加userPreferenceCategoyId属性。如何在 userPreferenceCategoryTypes 这个外键中插入新条目 cat ?我不会在系列中执行此操作。

编辑 1:

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

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

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    这似乎是唯一的解决方案

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 2021-12-21
      • 2018-01-05
      • 2014-08-10
      相关资源
      最近更新 更多