phzonta
phzonta

Reputation: 793

get associations with belongsToMany in sequelize.js

I have a many-to-many relation between User and Device model, through a UserDevice join table:

    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>;

I can find devices and populate customers correctly with:

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

I can't figure out how I can populate customers in other scenarios, i.e. when I'm setting customers manually. Right now I'm trying something like:

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

but it's not working, setAttributes doesn't set customers field.

Upvotes: 2

Views: 1249

Answers (1)

Bogdan Bochkovyi
Bogdan Bochkovyi

Reputation: 13

The answer is in the question. I found the bug today when encountered same issue. https://github.com/sequelize/sequelize/blob/master/lib/model.js#L3483

setAttributes seems to be a reserved method for sequelize.

Upvotes: 1

Related Questions