Jag antar att du frågar om Sequelize sätt att göra frågan. Jag är inte säker på om jag förstår din fråga rätt. Du letar efter två frågor:
- Fråga alla artiklar från användare som följs,
- Fråga prenumererat land/tagg/artikel för specifik användare,
Låt mig börja med associationerna mellan modellerna.
// 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' });
Med hjälp av ovanstående association kan vi nu fråga alla artiklar från följda användare
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
});
Ovanstående fråga skulle generera resultat liknande
{
id: 1,
Followers: [
{
id: 4,
Articles: [
{
id: 1,
title: 'article title' // some example field of Article model
}
]
}
]
}
Om du vill fråga land/tagg/artikel som prenumereras av en specifik användare, måste du göra andra associationer i Subscribe
modell
// in Subscribe model definition
Subscribe.belongsTo(Tag, { foreignKey: 'tagId' });
Subscribe.belongsTo(Article, { foreignKey: 'articleId' });
Subscribe.belongsTo(Country, { foreignKey: 'payId' });
Nu har vi alla associationer som krävs för att utföra den andra frågan du bad om
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
});
I det här exemplet får du användare med alla hans prenumerationer nås via user.Subscribes
, som kommer att ha kapslade attribut Tag
, Country
och Article
. Om användaren prenumererar på Tag
, båda Country
och Article
skulle vara NULL
i det här fallet.