在 sequelize.js 中获取与 belongsToMany 的关联

Posted

技术标签:

【中文标题】在 sequelize.js 中获取与 belongsToMany 的关联【英文标题】:get associations with belongsToMany in sequelize.js 【发布时间】:2017-03-02 07:16:36 【问题描述】:

我通过 UserDevice 连接表在 User 和 Device 模型之间建立了多对多关系:

    device.belongsToMany(user, 
        through: 
            model: userDevice
        ,
        foreignKey: "deviceId",
        as: "customers"
    );

    user.belongsToMany(device, 
        through: 
            model: userDevice
        ,
        foreignKey: "customerId",
        as: "devices"
    );

    setCustomers: Sequelize.BelongsToManySetAssociationsMixin<UserInstance, string, UserDeviceAttribute>;
    getCustomers: Sequelize.BelongsToManyGetAssociationsMixin<UserInstance>;

我可以找到设备并正确填充客户:

    this.db.models.Device.findAll(
        include: [
            model: User,
            as: "customers"
        ]

我不知道如何在其他情况下填充客户,即当我手动设置客户时。现在我正在尝试类似的东西:

        return device.setCustomers(customers)
        .then(() => 
            return device.getCustomers();
        )
        .then((users) => 
            device.setAttributes("customers", users);
            return device;
        );

但它不起作用,setAttributes 没有设置客户字段。

【问题讨论】:

【参考方案1】:

答案就在问题中。我今天遇到同样问题时发现了这个错误。 https://github.com/sequelize/sequelize/blob/master/lib/model.js#L3483

setAttributes 似乎是 sequelize 的保留方法。

【讨论】:

以上是关于在 sequelize.js 中获取与 belongsToMany 的关联的主要内容,如果未能解决你的问题,请参考以下文章

获取由 sequelize.js 生成的原始查询 [重复]

如何在关联表Sequelize js中获取自定义字段

我可以在 Sequelize.js 中的单个查询中获取 ID 为 1 的类别和该类别的所有子类别吗?

Sequelize js如何获取关联模型的平均值(聚合)

sequelize (js) 关联多个列与一个表

由于带有 sequelize.js 的 UUID 外键,尝试将行插入表时出错