附加属性 sequelize pivot n:m

Posted

技术标签:

【中文标题】附加属性 sequelize pivot n:m【英文标题】:Additional Attributes 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

【问题讨论】:

【参考方案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 的文档:“通过传递实例数组或其主键来设置关联模型。不在传递数组中的所有内容都将取消关联。”。如果您想更新关系数据,或者在否决答案之前更好地形成您的问题,您应该执行不同的操作。

以上是关于附加属性 sequelize pivot n:m的主要内容,如果未能解决你的问题,请参考以下文章

Sequelize 查询在多对多关系中显示附加数据

如何向 Pivot 添加附加信息(使用 Fluent)?

关联(pivot,belongsToMany)中的续集挂钩(afterCreate.afterUpdate)不起作用

Sequelize,GraphJS:无法读取 null 的属性“2”

复数如何在 Sequelize 中工作?

sequelize 是不是可以通过关联表中的属性过滤查询?