Eu suponho que você perguntou sobre a maneira de fazer a consulta do Sequelize. Não tenho certeza se entendi sua pergunta corretamente. Você está procurando duas consultas:
- Consulte todos os artigos de usuários seguidos,
- Consulte o país/tag/artigo inscrito de um usuário específico,
Deixe-me começar com as associações feitas entre os modelos.
// 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' });
Com o uso da associação acima, agora podemos consultar todos os artigos de usuários seguidos
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
});
A consulta acima geraria um resultado semelhante a
{
id: 1,
Followers: [
{
id: 4,
Articles: [
{
id: 1,
title: 'article title' // some example field of Article model
}
]
}
]
}
Se você quiser consultar o país/tag/artigo inscrito por um usuário específico, você teria que fazer outras associações em
Subscribe
modelo // in Subscribe model definition
Subscribe.belongsTo(Tag, { foreignKey: 'tagId' });
Subscribe.belongsTo(Article, { foreignKey: 'articleId' });
Subscribe.belongsTo(Country, { foreignKey: 'payId' });
Agora temos todas as associações necessárias para realizar a segunda consulta que você pediu
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
});
Neste exemplo você obtém o usuário com todas as suas assinaturas acessadas via
user.Subscribes
, que terá atributos aninhados Tag
, Country
e Article
. Se o usuário se inscreveu em Tag
, ambos Country
e Article
seria NULL
nesse caso.