Sequelizeのクエリ方法について質問されたと思いますが、あなたの質問を正しく理解しているかどうかはわかりません。 2つのクエリを探しています:
- フォローしているユーザーのすべての記事をクエリする
- 特定のユーザーの登録国/タグ/記事をクエリする
モデル間で行われた関連付けから始めましょう。
// 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' });
これで、要求した2番目のクエリを実行するために必要なすべての関連付けができました
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
になります この場合。