Saya berasumsi bahwa Anda bertanya tentang cara Sequelize melakukan kueri. Saya tidak yakin apakah saya memahami pertanyaan Anda dengan benar. Anda mencari dua pertanyaan:
- Kueri semua artikel dari pengguna yang diikuti,
- Kueri negara/tag/artikel langganan pengguna tertentu,
Mari saya mulai dengan asosiasi yang dibuat antara model.
// 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' });
Dengan menggunakan asosiasi di atas, kami sekarang dapat menanyakan semua artikel dari pengguna yang diikuti
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
});
Permintaan di atas akan menghasilkan hasil yang mirip dengan
{
id: 1,
Followers: [
{
id: 4,
Articles: [
{
id: 1,
title: 'article title' // some example field of Article model
}
]
}
]
}
Jika Anda ingin menanyakan negara/tag/artikel yang dilanggan oleh pengguna tertentu, Anda harus membuat asosiasi lain di Subscribe
model
// in Subscribe model definition
Subscribe.belongsTo(Tag, { foreignKey: 'tagId' });
Subscribe.belongsTo(Article, { foreignKey: 'articleId' });
Subscribe.belongsTo(Country, { foreignKey: 'payId' });
Sekarang kami memiliki semua asosiasi yang diperlukan untuk melakukan kueri kedua yang Anda minta
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
});
Dalam contoh ini Anda mendapatkan pengguna dengan semua langganannya diakses melalui user.Subscribes
, yang akan memiliki atribut bersarang Tag
, Country
dan Article
. Jika pengguna berlangganan Tag
, keduanya Country
dan Article
akan menjadi NULL
dalam hal ini.