Sequelize: Associations not working

Created on 31 Dec 2015  路  1Comment  路  Source: sequelize/sequelize

I have three models, one for a User, Group and Relationship. I already have my db schema in postgres with a FK relationship with Relationship and User / Relationship and Group, so I'd rather not have sequalize create my schema for me (so am not using force) . When making a call such as

Membership.findAll({where:{groupId:groupId}, include:[{model:User}, {model:Group}]})

I get an error self.$expandAttributes is not a function and am struggling to figure out why. I have snippets below and the call above is in findByGroupId . Anyways, if anyone has a suggestion, it would be appreciated.

//models
module.exports = function(sequelize, DataTypes) {
    var User = sequelize.define("User", {
        id: {
            type: DataTypes.UUID,
            defaultValue: DataTypes.UUIDV4,
            primaryKey: true
        }
    }, {
        tableName: 'users'
    });
    return User;
};

module.exports = function(sequelize, DataTypes) {
    var Group = sequelize.define("Group", {
        id: {
            type: DataTypes.UUID,
            defaultValue: DataTypes.UUIDV4,
            primaryKey: true
        },
    } , {
        tableName: 'groups'
    });

    return Group;
};


module.exports = function(sequelize, DataTypes) {
    var Membership = sequelize.define("Membership", {
        id: {
            type: DataTypes.UUID,
            defaultValue: DataTypes.UUIDV4,
            primaryKey: true
        },
        group: {
            type: DataTypes.UUID,
            field: 'groupId'
        },
        user: {
            type: DataTypes.UUID,
            field: 'userId'
        }
    }, {
        classMethods: {
            associate: function(models) {
                Membership.belongsTo(models.Group, { foreignKey: 'groupId'});
                Membership.belongsTo(models.User, { foreignKey: 'userId'});
                models.Group.hasMany(Membership, { foreignKey: 'groupId', targetKey:'groupId', 'as':'group'});
                models.User.hasOne(Membership, { foreignKey: 'userId', targetKey:'userId', 'as':'user'});
            },

            findByGroupId: function (groupId) {
                return new Promise(function(resolve, reject) {
                    Membership.findAll({where:{groupId:groupId}, include:[{model:User}, {model:Group}]})
                        .then(function (memberships) {
                            console.log(memberships);
                        })
                        .then(function(memberships) {
                            resolve(memberships);
                        })
                        .catch(function (err) {
                            // err = self.$expandAttributes is not a function
                            reject(err);
                        });
                });
            },

        tableName: 'memberships'
    });

    return Membership;
};

// how i am starting express
models.sequelize.sync().then(function () {
    server.listen(app.get('port'), function() {
        debug('Express server listening on port ' + server.address().port);
    });
});

Most helpful comment

i was referencing the User as User and not model.User and ditto for group

>All comments

i was referencing the User as User and not model.User and ditto for group

Was this page helpful?
0 / 5 - 0 ratings