2015-05-19 4 views
3

В моем приложении пользователь может иметь несколько module, которые хранятся в таблице user_has_module. Это означает, что для каждой строки user_has_module я хочу включить module, где находятся совпадения module_id.Sequelize hasMany issue issue

модуль

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 
}) 

Мое отношение

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

Теперь то, что я хочу do присоединяется к ним по номеру module.module_id = user_has_module.module_id.

Моя проблема заключается в том, что module есть, как вы можете видеть, два primary key, и когда sequelize соединяет эти две таблицы, он выбирает в качестве своего academy_idprimary key.

Мой вопрос, есть ли способ сказать Sequelize, что в этом отношении он должен выбрать primary keymodule_id из module?

ответ

1

Я думаю, вам не нужна модель User_has_module. Я предполагаю, что у вас есть одна модель под названием User и один модуль для вызова модели.

Таким образом, вы должны спроектировали что-то вроде этого:

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

И для модуля:

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

Чтобы получить пользователя с его модулями вы можете сделать это:

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

Надеюсь, я правильно понял ваш вопрос, и это помогает. Cheers