Sequelize自引用无法进行连接

时间:2016-11-19 10:03:16

标签: node.js associations sequelize.js

我正在尝试使用不同团队的匹配来制作多对多的表,但是当我尝试进行连接时,我遇到了这个错误:

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

1 个答案:

答案 0 :(得分:0)

您还需要为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`