2017-04-14 59 views
0

說我有三個型號這樣Sequelize加入型號包括多對多

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, 
} 

的關係是一頓飯

用戶(之一) - > UserPubCrawl(許多) - >酒吧(很多)

因此,1個用戶可以有多個pubcrawls到許多酒吧爲特定的酒吧抓取 我想找到所有「辛普森」酒吧去了。

我是否需要更改模型定義,如果有的話請告訴我? findAll Query的外觀如何?

回答

1

如果我理解您的數據庫關係的權利,它可以表述爲:

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

非常感謝你 –