【问题标题】:Node.js Sequelize ManyToMany relations producing incorrect SQLNode.js Sequelize ManyToMany 关系产生不正确的 SQL
【发布时间】:2013-02-05 14:06:11
【问题描述】:

我在处理多对多关系时遇到问题。

这是我的模型...

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:

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

这似乎有问题的是 WHERE 语句应该是 WHERE teams.team_id = '1'

我哪里错了?

提前致谢

【问题讨论】:

    标签: javascript mysql node.js sequelize.js


    【解决方案1】:

    嗯,实际上一切看起来都还不错。 db.players.findAllwhere: { team_id: 1 } 应该使用 WHERE players.team_id = '1' 创建查询。这是完全可以预料的。此外,您的teams 不会有team_id,而是id。但是,include 很有可能会损坏 atm。

    【讨论】:

    • 感谢您让我知道这不是错误,我已将查找更改为... db.teams.findAll({ where: {id: req.params.team_id}, include : ['players'] }).success(function(results) { res.json(results); });它按预期工作。感谢 Sascha 的续集,希望有更多的文档。
    • 是的,很多事情都需要改进。如果空闲时间足以一次完成所有事情:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多