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);
});
});
i was referencing the User as User and not model.User and ditto for group
Most helpful comment
i was referencing the User as User and not model.User and ditto for group