Předpokládám, že se ptáte na způsob provádění dotazu Sequelize. Nejsem si jistý, zda vaší otázce rozumím správně. Hledáte dva dotazy:
- Dotaz na všechny články sledovaných uživatelů,
- Dotaz na zemi/značku/článek konkrétního uživatele,
Dovolte mi začít s asociacemi vytvořenými mezi modely.
// in User model definition
User.belongsToMany(User, { as: 'Followers', through: 'Followers', foreignKey: 'userId', otherKey: 'followId' });
User.hasMany(Subscribe, { foreignKey: 'userId' });
User.hasMany(Article, { foreignKey: 'userId' });
S využitím výše uvedeného přidružení jsme nyní schopni dotazovat se na všechny články sledovaných uživatelů
models.User.findByPrimary(1, {
include: [
{
model: models.User,
as: 'Followers',
include: [ models.Article ]
}
]
}).then(function(user){
// here you have user with his followers and their articles
});
Výše uvedený dotaz by vygeneroval výsledek podobný
{
id: 1,
Followers: [
{
id: 4,
Articles: [
{
id: 1,
title: 'article title' // some example field of Article model
}
]
}
]
}
Pokud se chcete dotázat na zemi/značku/článek, který odebírá konkrétní uživatel, budete muset vytvořit další přidružení v Subscribe
model
// in Subscribe model definition
Subscribe.belongsTo(Tag, { foreignKey: 'tagId' });
Subscribe.belongsTo(Article, { foreignKey: 'articleId' });
Subscribe.belongsTo(Country, { foreignKey: 'payId' });
Nyní máme všechna přidružení potřebná k provedení druhého dotazu, o který jste požádali
models.User.findByPrimary(1, {
include: [
{
model: models.Subscribe,
include: [ models.Tag, models.Country, models.Article ]
}
]
}).then(function(user){
// here you get user with his subscriptions
});
V tomto příkladu získáte uživatele se všemi jeho odběry zpřístupněnými přes user.Subscribes
, který bude mít vnořené atributy Tag
, Country
a Article
. Pokud se uživatel přihlásil k odběru Tag
, obě Country
a Article
bude NULL
v tomto případě.