2016-11-19 31 views
0

我試圖做一個多對多表,不同的球隊的比賽和它的作品,但是當我試圖做一個連接我得到這個錯誤:Sequelize自我參考不容作出加入

Unhandled rejection Error: team is not associated to match! 

這裏是我的代碼:

var Sequelize = require('sequelize'); 
var sequelize = new Sequelize('cricket', 'root', ''); 


var Team = sequelize.define('team', { 
    name: Sequelize.STRING, 
}); 

var Match = sequelize.define('match', { 
    id: { 
     type: Sequelize.INTEGER, 
     primaryKey: true, 
     autoIncrement: true 
    }, 
    scoreHome: Sequelize.INTEGER, 
    scoreAway: Sequelize.INTEGER, 
}); 


Team.belongsToMany(Team, {as: 'Home', through: Match, foreignKey: 'homeTeamId'}); 
Team.belongsToMany(Team, {as: 'Away', through: Match, foreignKey: 'awayTeamId'}); 

sequelize.sync().then(function() { 
    Match.findAll({ 
     include: [ Team ] 
    }).then(function (matches) { 
     console.log(matches) 
    }); 
}); 

回答

0

您還需要提供匹配的反向關係。

在您當前的設置中,團隊與團隊相關聯,而不是匹配。 Match模型是你的模型。

例如,對於匹配有效的關聯是:

var HomeTeam = Match.belongsTo(Team, { as: 'HomeTeam', foreignKey: 'homeTeamId' }); 
var AwayTeam = Match.belongsTo(Team, { as: 'AwayTeam', foreignKey: 'awayTeamId' }) 

sequelize.sync().then(function() { 
    Match.findAll({ 
     include: [ HomeTeam, AwayTeam ] 
    }).then(function (matches) { 
     console.log(matches) 
    }); 
}); 

// Makes the following query 

// SELECT `match`.`id`, `match`.`scoreHome`, `match`.`scoreAway`, `match`.`createdAt`, `match`.`updatedAt`, `match`.`homeTeamId`, `match`.`awayTeamId`, `HomeTeam`.`id` 
// AS `HomeTeam.id`, `HomeTeam`.`name` AS `HomeTeam.name`, `HomeTeam`.`createdAt` 
// AS `HomeTeam.createdAt`, `HomeTeam`.`updatedAt` AS `HomeTeam.updatedAt`, `AwayTeam`.`id` AS `AwayTeam.id`, `AwayTeam`.`name` AS `AwayTeam.name`, `AwayTeam`.`createdAt` AS `AwayTeam.createdAt`, `AwayTeam`.`updatedAt` AS `AwayTeam.updatedAt` FROM `matches` AS `match` LEFT OUTER JOIN `teams` AS `HomeTeam` ON `match`.`homeTeamId` = `HomeTeam`.`id` LEFT OUTER JOIN `teams` AS `AwayTeam` ON `match`.`awayTeamId` = `AwayTeam`.`id` 
+0

它可以完美的,你救我的天@drinchev –