Je suppose que vous posez des questions sur la façon dont Sequelize effectue la requête. Je ne suis pas sûr de bien comprendre votre question. Vous recherchez deux requêtes :
- Interroger tous les articles des utilisateurs suivis,
- Interroger le pays/tag/article abonné d'un utilisateur spécifique,
Permettez-moi de commencer par les associations faites entre les modèles.
// 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' });
Avec l'utilisation de l'association ci-dessus, nous sommes maintenant en mesure d'interroger tous les articles des utilisateurs suivis
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
});
La requête ci-dessus générerait un résultat similaire à
{
id: 1,
Followers: [
{
id: 4,
Articles: [
{
id: 1,
title: 'article title' // some example field of Article model
}
]
}
]
}
Si vous voulez interroger le pays/tag/article souscrit par un utilisateur spécifique, vous devrez faire une autre association dans Subscribe
modèle
// in Subscribe model definition
Subscribe.belongsTo(Tag, { foreignKey: 'tagId' });
Subscribe.belongsTo(Article, { foreignKey: 'articleId' });
Subscribe.belongsTo(Country, { foreignKey: 'payId' });
Nous avons maintenant toutes les associations nécessaires pour effectuer la deuxième requête que vous avez demandée
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
});
Dans cet exemple, vous obtenez un utilisateur avec tous ses abonnements accessibles via user.Subscribes
, qui aura des attributs imbriqués Tag
, Country
et Article
. Si l'utilisateur s'est abonné à Tag
, les deux Country
et Article
serait NULL
dans ce cas.