Ik neem aan dat je vraagt naar de manier waarop Sequelize de query uitvoert. Ik weet niet zeker of ik je vraag goed begrijp. U zoekt twee vragen:
- Alle artikelen van gevolgde gebruikers opvragen,
- Bevragen op land/tag/artikel van specifieke gebruiker,
Laat ik beginnen met de associaties tussen de modellen.
// 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' });
Met gebruik van bovenstaande koppeling kunnen we nu alle artikelen van gevolgde gebruikers opvragen
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
});
Bovenstaande zoekopdracht zou een resultaat opleveren dat vergelijkbaar is met
{
id: 1,
Followers: [
{
id: 4,
Articles: [
{
id: 1,
title: 'article title' // some example field of Article model
}
]
}
]
}
Als u land/tag/artikel wilt opvragen waarop een specifieke gebruiker is geabonneerd, moet u andere koppelingen maken in Subscribe
model
// in Subscribe model definition
Subscribe.belongsTo(Tag, { foreignKey: 'tagId' });
Subscribe.belongsTo(Article, { foreignKey: 'articleId' });
Subscribe.belongsTo(Country, { foreignKey: 'payId' });
Nu hebben we alle koppelingen die nodig zijn om de tweede zoekopdracht uit te voeren waar u om vroeg
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
});
In dit voorbeeld krijg je gebruiker met al zijn abonnementen toegang via user.Subscribes
, die geneste attributen zal hebben Tag
, Country
en Article
. Als de gebruiker zich heeft geabonneerd op Tag
, beide Country
en Article
zou zijn NULL
in dit geval.