Sequelize self reference 无法进行连接

Sequelize self reference can´t make a join

我正在尝试使用不同团队的比赛进行多对多 table 并且它有效,但是当我尝试加入时出现此错误:

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

您还需要为匹配提供反向关系。

在您当前的设置中,Team 与 Team 相关联,而不是与 Match 相关联。 Match 模型是您的直通模型。

例如,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`