Ich nehme an, Sie fragen nach der Art und Weise, wie Sequelize die Abfrage durchführt. Ich bin mir nicht sicher, ob ich Ihre Frage richtig verstehe. Sie suchen nach zwei Abfragen:
- Alle Artikel von verfolgten Benutzern abfragen
- Abonniertes Land/Tag/Artikel eines bestimmten Benutzers abfragen
Lassen Sie mich mit den Assoziationen zwischen den Modellen beginnen.
// 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' });
Mit obiger Assoziation können wir nun alle Artikel von verfolgten Usern abfragen
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
});
Die obige Abfrage würde ein ähnliches Ergebnis wie
generieren{
id: 1,
Followers: [
{
id: 4,
Articles: [
{
id: 1,
title: 'article title' // some example field of Article model
}
]
}
]
}
Wenn Sie Länder/Tags/Artikel, die von bestimmten Benutzern abonniert wurden, abfragen möchten, müssen Sie andere Zuordnungen in Subscribe
vornehmen Modell
// in Subscribe model definition
Subscribe.belongsTo(Tag, { foreignKey: 'tagId' });
Subscribe.belongsTo(Article, { foreignKey: 'articleId' });
Subscribe.belongsTo(Country, { foreignKey: 'payId' });
Jetzt haben wir alle Zuordnungen, die erforderlich sind, um die zweite von Ihnen angeforderte Abfrage durchzuführen
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 diesem Beispiel erhalten Sie einen Benutzer mit all seinen Abonnements, auf die über user.Subscribes
zugegriffen wird , die verschachtelte Attribute Tag
haben , Country
und Article
. Wenn der Benutzer Tag
abonniert hat , beide Country
und Article
wäre NULL
in diesem Fall.