Tôi giả sử rằng bạn hỏi về cách Sequelize để thực hiện truy vấn, tôi không chắc liệu tôi có hiểu chính xác câu hỏi của bạn hay không. Bạn đang tìm kiếm hai truy vấn:
- Truy vấn tất cả các bài viết của những người dùng được theo dõi,
- Truy vấn quốc gia / thẻ / bài viết đã đăng ký của người dùng cụ thể,
Hãy để tôi bắt đầu với sự liên kết giữa các mô hình.
// 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' });
Với việc sử dụng liên kết trên, giờ đây chúng tôi có thể truy vấn tất cả các bài viết của những người dùng được theo dõi
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
});
Truy vấn trên sẽ tạo ra kết quả tương tự như
{
id: 1,
Followers: [
{
id: 4,
Articles: [
{
id: 1,
title: 'article title' // some example field of Article model
}
]
}
]
}
Nếu bạn muốn truy vấn quốc gia / thẻ / bài viết được đăng ký bởi người dùng cụ thể, bạn sẽ phải tạo một liên kết khác trong Subscribe
mô hình
// in Subscribe model definition
Subscribe.belongsTo(Tag, { foreignKey: 'tagId' });
Subscribe.belongsTo(Article, { foreignKey: 'articleId' });
Subscribe.belongsTo(Country, { foreignKey: 'payId' });
Bây giờ chúng tôi có tất cả các liên kết cần thiết để thực hiện truy vấn thứ hai mà bạn đã yêu cầu
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
});
Trong ví dụ này, bạn có được người dùng với tất cả các đăng ký của anh ấy được truy cập thông qua user.Subscribes
, sẽ có các thuộc tính lồng nhau Tag
, Country
và Article
. Nếu người dùng đã đăng ký Tag
, cả Country
và Article
sẽ là NULL
trong trường hợp này.