Предполагам, че питате за начина на Sequelize за извършване на заявката. Не съм сигурен дали разбирам въпроса ви правилно. Търсите две заявки:
- Запитване за всички статии на следвани потребители,
- Запитване за абонирана държава/маркировка/статия на конкретен потребител,
Нека започна с асоциациите, направени между моделите.
// 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' });
С използването на горната асоциация вече сме в състояние да правим запитвания за всички статии на следвани потребители
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
});
Горната заявка би генерирала резултат, подобен на
{
id: 1,
Followers: [
{
id: 4,
Articles: [
{
id: 1,
title: 'article title' // some example field of Article model
}
]
}
]
}
Ако искате да направите заявка за държава/таг/статия, абонирана от конкретен потребител, ще трябва да направите други асоциации в Subscribe
модел
// in Subscribe model definition
Subscribe.belongsTo(Tag, { foreignKey: 'tagId' });
Subscribe.belongsTo(Article, { foreignKey: 'articleId' });
Subscribe.belongsTo(Country, { foreignKey: 'payId' });
Сега имаме всички асоциации, необходими за изпълнение на втората заявка, която поискахте
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
});
В този пример получавате потребител с всичките му абонаменти, достъпни чрез user.Subscribes
, който ще има вложени атрибути Tag
, Country
и Article
. Ако потребителят се е абонирал за Tag
, и двете Country
и Article
ще бъде NULL
в този случай.