2017-06-08 4 views
0

Also immer noch versuchen, herauszufinden, wie man arbeiten und arbeiten mit Sequelize. Ich versuche ein Spiel mit mehreren Teams zu verbinden.Node JS Sequelize sql Assoziationen

Spiel:

"use strict" 
module.exports = (sequelize, DataTypes) => { 
    var game = sequelize.define('game', { 
      gameId: { 
       type: DataTypes.INTEGER, 
       primaryKey: true, 
       autoIncrement: true 
      }, 
      awayTeam: { 
       type: DataTypes.INTEGER, 
       references: { 
        model: "team", 
        key: 'teamId', 
       }, 
       allowNull: false 
      }, 
      homeTeam: { 
       type: DataTypes.INTEGER, 
       references: { 
        model: "team", 
        key: 'teamId', 
       }, 
       allowNull: false 
      }, 
      awayTeamScore: { 
       type: DataTypes.INTEGER, 
       allowNull: false 
      }, 
      homeTeamScore: { 
       type: DataTypes.INTEGER, 
       allowNull: false 
      }, 
     }, 
     { 
      timestamps: false, 
      tableName: 'game', 
       associate: function (models) { 
       /// trying to figure this out 
      } 
     } 
    ); 
    return game; 
}; 

Team:

"use strict" 
module.exports = (sequelize, DataTypes) => { 
    var team = sequelize.define('team', { 
      teamId: { 
       type: DataTypes.INTEGER, 
       primaryKey: true, 
       autoIncrement: true 
      }, 
      name: { 
       type: DataTypes.STRING, 
       allowNull: false 
      }, 
      city: { 
       type: DataTypes.STRING, 
       allowNull: false 
      } 
     }, 
     { 
      timestamps: false, 
      tableName: 'team', 
      associate: function(models){ 
       /// trying to figure this out 
      } 
     } 
    ); 

    return team; 
}; 

Wäre es Team belongsToMany Spiele und Spiele hasMany Teams sein?

Antwort

2

Sie müssen hasMany() Funktion verwenden, innerhalb associate() Klassenmethode.

Spiel:

"use strict"; 

var game = {}; 
var classmethods = {}; 

module.exports = (sequelize, DataTypes) => { 
    game = sequelize.define('game', { 
      gameId: { 
       type: DataTypes.INTEGER, 
       primaryKey: true, 
       autoIncrement: true 
      }, 
      awayTeam: { 
       type: DataTypes.INTEGER, 
       references: { 
        model: "team", 
        key: 'teamId', 
       }, 
       allowNull: false 
      }, 
      homeTeam: { 
       type: DataTypes.INTEGER, 
       references: { 
        model: "team", 
        key: 'teamId', 
       }, 
       allowNull: false 
      }, 
      awayTeamScore: { 
       type: DataTypes.INTEGER, 
       allowNull: false 
      }, 
      homeTeamScore: { 
       type: DataTypes.INTEGER, 
       allowNull: false 
      }, 
     }, 
     { 
      timestamps: false, 
      classmethods: classmethods 
     } 
    ); 
    return game; 
}; 

classmethods.associate = function (models) { 
    game.hasMany(models.team, {foreignKey: 'teamId'}); 
}; 

Damit dies funktioniert, müssen Sie auch die Einrichtung Sequelize brauchen diese Art und Weise: https://github.com/jklepatch/kangaroojs/blob/master/apps/web/models/index.js

Wenn Sie auch die Zuordnung zu verwenden, aus dem Team-Modell in der Lage sein wollen, Sie müssten 'belongsTo()` im Teammodell

"use strict"; 

var team; 
var classmethods; 

module.exports = (sequelize, DataTypes) => { 
    team = sequelize.define('team', { 
      teamId: { 
       type: DataTypes.INTEGER, 
       primaryKey: true, 
       autoIncrement: true 
      }, 
      name: { 
       type: DataTypes.STRING, 
       allowNull: false 
      }, 
      city: { 
       type: DataTypes.STRING, 
       allowNull: false 
      } 
     }, 
     { 
      timestamps: false, 
      tableName: 'team', 
      classmethods: classmethods 
     } 
    ); 

    return team; 
}; 

classmethods.associate = function (models) { 
    game.belongsTo(models.game); 
}; 
verwenden