【问题标题】:Sequelize self reference can´t make a joinSequelize 自我引用无法加入
【发布时间】:2016-11-19 18:57:28
【问题描述】:

我正在尝试创建一个包含不同团队比赛的多对多表,并且它可以工作,但是当我尝试加入时,我收到了这个错误:

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

【问题讨论】:

    标签: node.js associations sequelize.js


    【解决方案1】:

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

    在您当前的设置中,Team 与 Team 相关联,而不是 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`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-05
      • 2020-07-29
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 2019-03-16
      • 2018-11-12
      • 1970-01-01
      相关资源
      最近更新 更多