मुझे लगता है कि आप क्वेरी करने के सीक्वेलाइज़ तरीके के बारे में पूछते हैं। मुझे यकीन नहीं है कि मैं आपके प्रश्न को सही ढंग से समझता हूं। आप दो प्रश्नों की तलाश में हैं:
- अनुसरण किए गए उपयोगकर्ताओं के सभी लेखों को क्वेरी करें,
- क्वेरी सब्सक्राइब्ड देश/टैग/विशिष्ट उपयोगकर्ता का लेख,
मैं मॉडलों के बीच बने जुड़ाव से शुरू करता हूं।
// 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
इस मामले में।