2017-03-17 48 views
0
let data = require('./../../config/db') 
let connection = data.connection 
let sequelize = data.sequelize 
let sql = function(){ 
    let clubMembers = connection.define('club_members',{ 
      position:{ 
       type :sequelize.ENUM('President','Treasurer') , 
       allowNull : false 
      } 
     }, 
     { 
      classMethods : { 
       associate : function(models){ 
        let clubMembers = models.club_members 
        let club = models.club 
        let student = models.student 
        club.hasMany(clubMembers,{ 
         foreignKey : "club_id" 
        }) 
        student.hasMany(clubMembers,{ 
         foreignKey : "student_id" 
        }) 
       } 
      } 
     } 
    ); 
    return clubMembers; 
} 
module.exports = sql; 

我不需要id属性在此表中但自动创建它。两个外键的组合应该被视为主键,即组合主键。 enter image description here不需要自动创建的续集的id属性

+0

你想创建俱乐部和学生之间的多对多关系吗? – piotrbienias

+0

是它的多对多关系 –

+0

“club_member”表代表多对多的关系,所以俱乐部可以有很多学生,学生可以属于很多俱乐部。是对的吗? – piotrbienias

回答

1

您应该使用belongsToManyassociate功能

associate: function(models){ 
    models.club.belongsToMany(models.student, { through: models.club_members, foreignKey: 'club_id' }); 
    models.student.belongsToMany(models.club, { through: models.club_members, foreignKey: 'student_id' }); 
} 

这将创建club_members表由club_idstudent_id复合主键,没有默认id列。

+1

由于它的工作 只需更新这'models.club.belongsToMany(models.student,{通过 :models.club_members,FOREIGNKEY: 'club_id' }); models.student.belongsToMany(models.club,{ through:models.club_members,foreignKey:'student_id' });' –

+0

我的不好,忘了大括号,谢谢! ;) – piotrbienias