Получить значения из связанной таблицы с помощью Sequelize.js

team table               match table
===========     ================================
tid= name       mid=   date =home_team=away_team
=============   ================================
01 = denver     01 =10.11.13 =   01    =   04
02 = minesota   02 =11.11.13 =   02    =   03
03 = orlando    03 =11.11.13 =   04    =   02
04 = portland   04 =12.11.13 =   03    =   01

У меня есть классическая проблема SQL JOIN - заполнены данные соответствия и не могут получить имена домашних и отдаленных команд, которые находятся в другой таблице.

var Team = sequelize.define('Team', { ... });
var Match = sequelize.define('Match',{ .. });

Team.hasOne(Match, {foreignKey: 'home_team', as: 'Home'})
Team.hasOne(Match, {foreignKey: 'away_team', as: 'Away'});

Как я понял из Документов после создания as: 'Home и as: 'Away, я получаю некоторые геттеры и сеттеры вроде Match.getHome, но я в замешательстве. как я мог его использовать

Match.find({where: {id: 1}}).success(function(match) {
    console.log(match);
});

Ответ 1

Проблема заключается в вашей ассоциации. Вы только определили ассоциацию из команды, чтобы соответствовать, но теперь вы хотите пойти другим путем, от матча к команде. Это означает, что вам нужно сделать:

Match.belongsTo(Team, {foreignKey: 'home_team', as: 'Home'});
Match.belongsTo(Team, {foreignKey: 'away_team', as: 'Away'});

После этого вы можете сделать

Match.find({where: {mid: 1}}).success(function(match) {
    match.getHome().success(function(home_team) {

    });
});

Или вы можете использовать интенсивную загрузку:

Match.find({
    where: { mid: 1 }, 
    include: [
        { model: Team, as: 'Home'}
    ]
}).success(function(match) {
    // Here you can access the home team data in match.home
});

Если вы хотите сразу как домашнюю, так и отдаленную команду:

Match.find({
    where: { mid: 1 }, 
    include: [
        { model: Team, as: 'Home'}
        { model: Team, as: 'Away'}
    ]
}).success(function(match) {
    // Here you can access the home team data in match.home and away team in match.away
});