2016-09-23 16 views
9

Tworzę modele i migracje dla dwóch typów graczy i zespołu, którzy mają wiele do wielu relacji. Używam modelu sequelize: create, ale nie widzę sposobu określania kluczy obcych lub dołączania do tabel.Tworzenie tabeli łączenia z kluczami obcymi przy użyciu sequela lub sequelize-cli

sequelize model:create --name Player --attributes "name:string" 
sequelize model:create --name Team --attributes "name:string" 

Po utworzeniu modelu dodaję skojarzenia. odtwarzacz:

Player.belongsToMany(models.Team, { through: 'PlayerTeam', foreignKey: 'playerId', otherKey: 'teamId' }); 

w zespole:

Team.belongsToMany(models.Player, { through: 'PlayerTeam', foreignKey: 'teamId', otherKey: 'playerId' }); 

Następnie migracje są prowadzone z

sequelize db:migrate 

Są stoły dla gracza i zespół, ale nie ma to dołączyć tabelę (ani kluczy obcych) w bazie danych. W jaki sposób można utworzyć klucze obce i tabelę dołączania? Czy istnieje ostateczny przewodnik, jak to zrobić?

Odpowiedz

9

Też mam takie samo pytanie jak ty, szukałem, ale bez powodzenia. To jest sposób, w jaki to zrobiłem i modyfikuję następujący kod. Ręczne tworzenie migracji tabeli sprzężeń. I dodaję indeks złożony dla obu kluczy obcych.

module.exports = { 
    up: function(queryInterface, Sequelize) { 
    return queryInterface.createTable('PlayerTeam', { 
     id: { 
     allowNull: false, 
     autoIncrement: true, 
     primaryKey: true, 
     type: Sequelize.INTEGER 
     }, 
    playerId: { 
     type: Sequelize.INTEGER, 
     allowNull: false, 
     references: { 
     model: 'Player', 
     key: 'id' 
     }, 
     onUpdate: 'cascade', 
     onDelete: 'cascade' 
    }, 
    teamId: { 
     type: Sequelize.INTEGER, 
     allowNull: false, 
     references: { 
     model: 'Team', 
     key: 'id' 
     }, 
     onUpdate: 'cascade', 
     onDelete: 'cascade' 
    }, 
     createdAt: { 
     allowNull: false, 
     type: Sequelize.DATE 
     }, 
     updatedAt: { 
     allowNull: false, 
     type: Sequelize.DATE 
     } 
    }).then(() => { 
     // Create Unique CompoundIndex 
     let sql = `CREATE UNIQUE INDEX "PlayerTeamCompoundIndex" 
       ON public."PlayerTeam" 
       USING btree 
       ("playerId", "teamId"); 
      `; 
     return queryInterface.sequelize.query(sql, {raw: true}); 
     }); 
    }, 
    down: function(queryInterface, Sequelize) { 
    return queryInterface.dropTable('PlayerTeam'); 
    } 
}; 
Powiązane problemy