Получать значения из связанной таблицы с Sequelize.Яш

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