Sequelize hasMany issue issue

In my application, a user can have several module

that are stored in a table user_has_module

. This means that for each line, user_has_module

I want to include module

where matches module_id

.

module

Module = sequelize.define('module', {
    academy_id: {
        type: DataTypes.INTEGER,
        primaryKey: true
    },
    module_id: {
        type: DataTypes.INTEGER,
        primaryKey: true
    },
    module_module_type_id: DataTypes.INTEGER,
    sort_number: DataTypes.INTEGER,
    score_to_pass: DataTypes.INTEGER
    }, {
        freezeTableName: true
    })

      

user_has_module

User_has_module = sequelize.define('user_has_module', {
     user_id: {
        type: DataTypes.INTEGER,
        primaryKey: true
     },
     module_id: {
        type: DataTypes.INTEGER,
        primaryKey: true
     },
     academy_team_id: {
        type: DataTypes.INTEGER,
        primaryKey: true
     },
     academy_id: {
        type: DataTypes.INTEGER,
        primaryKey: true
     },
     sort_number: DataTypes.INTEGER,
     is_complete: DataTypes.INTEGER,
     score_to_pass: DataTypes.INTEGER,
     is_open: DataTypes.INTEGER,
     deadline: DataTypes.DATE
}, {
   freezeTableName: true
})

      

My relationship

User_has_module.belongsTo(Module, {foreignKey: 'module_id'});

      

Now I want to join them on module.module_id = user_has_module.module_id

.

My problem is that it module

has, as you can see, two primary key

, and when sequelize joins these two tables, it selects academy_id

as its own primary key

.

My question is, is there a way to say Sequelize

which in this respect it should choose primary key

module_id

from module

?

+3


source to share


1 answer


I guess you don't need the User_has_module model. I am assuming you have one model called User and one module to call the model.

So, you should have designed something like this:

var User = sequelize.define("User", {
        name: DataTypes.STRING
    }, {
        classMethods: {
            associate: function(models) {
                User.hasMany(models.Module);
            }
        }
    });

      

And for your module:



var Module = sequelize.define("Module", {
        name: DataTypes.STRING
    }, {
        classMethods: {
            associate: function(models) {
                Module.belongsToMany(models.User);
            }
        }
    });

      

To get a user with their modules, you can do this:

models.User.findAll({ include: [models.Module]}).then(function(users){
        console.log(users);
    });

      

Hope I understood your question correctly and it helps. Greetings

+1


source







All Articles