2013-02-05 3 views
3

J'ai un problème avec séquencer ManyToMany relations.Node.js Sequelize relations ManyToMany produisant un SQL incorrect

Voici mes modèles ...

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

    } 

}; 

Voici le trouver

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

La découverte ci-dessus produira l'instruction SQL suivante:

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'; 

Ce qui semble être mal avec c'est que l'instruction WHERE doit être WHERE teams.team_id = '1'

Où est-ce que je me trompe?

Merci à l'avance

Répondre

1

Hmm fait tout semble tout à fait OK-ish. db.players.findAll avec where: { team_id: 1 } doit créer une requête avec WHERE players.team_id = '1'. C'est parfaitement prévu. En outre, vous teams n'aura pas un team_id mais un id à la place. Cependant, il y a une bonne chance que include soit cassé atm.

+0

Merci de m'avoir fait savoir que ce n'était pas un bug, j'ai changé la recherche en ... db.teams.findAll ({ où: {id: req.params.team_id}, include: [' des joueurs] }). success (fonction (résultats) { res.json (résultats); }); et cela fonctionne comme prévu. Merci d'avoir choisi Sascha, j'aimerais juste qu'il y ait plus de documentation. –

+0

ouais beaucoup de choses doivent être améliorées. si le temps libre suffirait à tout faire à la fois :) – sdepold

Questions connexes