说我有三个这样的模型

var User = _define('user', {
  username: Sequelize.INTEGER
});
var UserPubCrawl = _define('userpubcrawl', {
  user_id: Sequelize.STRING(64), // the user
  bar_id: Sequelize.INTEGER // 1 to many
});

var Bars = _define('bar', {
  name:  type: Sequelize.STRING,
}


关系是一顿饭

User(一个)-> UserPubCrawl(很多)-> Bars(很多)

因此,一个用户可以针对多个特定的酒吧抓取,将多个酒吧抓取到多个酒吧
我想找到“辛普森”去过的所有酒吧。

我是否需要更改模型定义,如果需要,请告诉我?
findAll查询是什么样的?

最佳答案

如果我正确理解您的数据库关系,可以这样表示:

1位用户可以访问许多酒吧
1条酒吧可以被许多用户访问

因此,换句话说,用户和酒吧之间具有多对多关系,其中JOIN表是UserPubCrawl。

如果是这样,您的模型关联应如下所示:

User.belongsToMany(Bar, { through: UserPubCrawl });
Bar.belongsToMany(User, { through: UserPubCrawl });


而且,找出辛普森去过的所有酒吧非常简单:

User.findAll({
  where: { user_id: '123' },
  include: {
    model: Bars,
    through: { attributes: [] } // this will remove the rows from the join table (i.e. 'UserPubCrawl table') in the result set
  }
});

09-25 22:27