2013-02-05 2 views
3

ManyToMany sequelize 관계에 문제가 있습니다.Node.js Sequelize 잘못된 SQL을 생성하는 ManyToMany 관계

SELECT 
    players . *, 
    teams.name AS `teams.name`, 
    teams.id AS `teams.id` 
FROM 
    players 
     LEFT OUTER JOIN 
    teams_has_players ON teams_has_players.player_id = players.id 
     LEFT OUTER JOIN 
    teams ON teams.id = teams_has_players.team_id 
WHERE 
    players.team_id = '1'; 

문제로 보이는 : 여기

여기

var db = { 

    players: sequelize.define('players', { 
     name: Sequelize.STRING 
    }), 

    teams: sequelize.define('teams', { 
     name: Sequelize.STRING 
    }), 


    init: function() { 

     this.players.hasMany(this.teams, {joinTableName: 'teams_has_players'}); 
     this.teams.hasMany(this.players, {joinTableName: 'teams_has_players'}); 

     this.players.sync(); 
     this.teams.sync(); 

    } 

}; 

db.players.findAll({ 
    where:  {team_id: 1}, 
    include: ['teams'] 
}).success(function(results) { 
    // print the results 
}); 

는 위의 발견은 다음과 같은 SQL을 생성합니다 찾을 수있다 ... 내 모델입니다 WHERE 문은 WHERE teams.team_id = '1'

이어야합니다.

어디서 이런 문제가 발생합니까?

미리 감사드립니다.

답변

1

흠 실제로 모든 것이 정상적으로 보입니다. db.players.findAllwhere: { team_id: 1 }WHERE players.team_id = '1'으로 쿼리를 생성해야합니다. 그게 완전히 예상됩니다. 또한 teams에는 team_id이 없지만 대신 id이 표시됩니다. 그러나, include이 atm에서 고장 났을 가능성이 큽니다.

+0

알려 주셔서 감사합니다. 버그가 아니 었음을 알려 주셔서 감사합니다. db.teams.findAll ({ : {id : req.params.team_id}, 포함 : [ ' 선수] }) 성공 (기능 (결과) { res.json (결과); }); 예상대로 작동합니다. Sascha를 후한 주셔서 감사합니다. 설명서가 더 있으면 좋겠어요. –

+0

예 많은 것들이 개선되어야합니다. 여가 시간에 모든 것을 한꺼번에 처리 할 수 ​​있다면 :) – sdepold