Jeg går ud fra, at du spørger om Sequelize måde at udføre forespørgslen på. Jeg er ikke sikker på, om jeg forstår dit spørgsmål korrekt. Du leder efter to forespørgsler:
- Forespørg alle artikler fra fulgte brugere,
- Forespørgsel på land/tag/artikel for en bestemt bruger,
Lad mig starte med associationerne mellem modellerne.
// 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 brug af ovenstående tilknytning er vi nu i stand til at forespørge på alle artikler fra fulgte brugere
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
});
Ovenstående forespørgsel ville generere resultat svarende til
{
id: 1,
Followers: [
{
id: 4,
Articles: [
{
id: 1,
title: 'article title' // some example field of Article model
}
]
}
]
}
Hvis du vil forespørge på land/tag/artikel, der er abonneret af en bestemt bruger, skal du oprette en anden tilknytning i Subscribe
model
// in Subscribe model definition
Subscribe.belongsTo(Tag, { foreignKey: 'tagId' });
Subscribe.belongsTo(Article, { foreignKey: 'articleId' });
Subscribe.belongsTo(Country, { foreignKey: 'payId' });
Nu har vi alle de tilknytninger, der kræves for at udføre den anden forespørgsel, 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 dette eksempel får du bruger med alle hans abonnementer tilgået via user.Subscribes
, som vil have indlejrede attributter Tag
, Country
og Article
. Hvis brugeren abonnerer på Tag
, begge Country
og Article
ville være NULL
i dette tilfælde.