【问题标题】:Additional Attributes sequelize pivot n:m附加属性 sequelize pivot n:m
【发布时间】:2019-07-17 09:43:23
【问题描述】:

我的案例模型中设置了多对多关系

Case.associate = function (models) {
    Case.belongsToMany(models.ranger, {
        through: 'case_rangers',
        foreignKey: 'caseId',
        otherKey: 'rangerId',
        as: 'assignee',
        timestamps: false,
        scope: {
            status: 'ASSIGNED'
        }
    });

};

现在,我正在尝试在一个案例中添加一个受让人,该案例未能在数据透视表中存储附加列 查询

Case.findByPk(2).then((caseId2) => {
    ranger.findByPk(1).then((helper) => {
        caseId2.setAssignee(helper, {eta: "1 hr" });
    })
});

在我的例子中,eta 存储的是 null

【问题讨论】:

    标签: node.js orm sequelize.js


    【解决方案1】:

    根据set在n:m关系中的文档,第二个参数是options,为了设置额外的属性你需要传递options.through所以你应该调用:

    caseId2.setAssignee(helper, { through: { eta: "1 hr" } });.

    文档:http://docs.sequelizejs.com/class/lib/associations/belongs-to-many.js~BelongsToMany.html#instance-method-set

    编辑: 要添加新的assigneecaseId2,您应该使用带有附加属性的addAssignee 方法:

    caseId2.addAssignee(helper, { through: { eta: '1 hr' } });

    这应该在caseId2helper 之间创建新的关联以及through 参数指定的附加关系数据。

    【讨论】:

    • set 用于更新之前存储的受理人。根据您的查询,它会将 eta 设置为该案件所有受让人的 1 小时。
    • @RanjanAdhikari 来自 set 的文档:“通过传递实例数组或其主键来设置关联模型。不在传递数组中的所有内容都将取消关联。”。如果您想更新关系数据,或者在否决答案之前更好地形成您的问题,您应该执行不同的操作。
    猜你喜欢
    • 1970-01-01
    • 2018-08-18
    • 2017-04-19
    • 2018-09-29
    • 2019-03-16
    • 2021-05-01
    • 2011-11-01
    • 2020-11-12
    • 1970-01-01
    相关资源
    最近更新 更多