我的数据库中的标签与故事之间存在多对多的关系。我想过滤具有特定标签的人的故事,但是我想在结果集中包含故事的所有标签。我该怎么做呢?
现在,我的查询只返回每个故事的一个标记(用作过滤器的标记)。我希望它包含给定故事的所有标签。
这是我目前的查询。
models.Story.findAll({
attributes: ['id', 'title', 'description'],
include: [
{
attributes: ['name', 'description'],
model: models.Tag,
where: {
id: tag.id
},
order: [['useCount', 'desc']]
},
{
attributes: ['id', 'displayName'],
model: models.User,
where: {
id: models.sequelize.col('User.id')
}
}
]
})
答案 0 :(得分:1)
假设您的关系被建模为
models.users.hasMany(models.stories);
models.stories.belongsTo(models.users);
models.stories.belongsToMany(models.tags, {
through: 'story_tags'
});
models.stories.hasMany(models.story_tags);
models.tags.belongsToMany(models.stories, {
through: 'story_tags'
});
models.tags.hasMany(models.story_tags);
models.story_tags.belongsTo(models.stories);
models.story_tags.belongsTo(models.tags);
然后就是你能做的事情:
models.stories.findAll({
attributes: ['id', 'title', 'description'],
include: [{
model: models.tags,
attributes: ['id'],
where: {
id: tag.id
}
}, {
model: models.users,
attributes: ['id', 'displayName'],
where: {
id: {
$col: 'user.id'
}
}
}, {
model: models.story_tags,
attributes: ['id'],
include: [{
model: models.tags,
attributes: ['name', 'description']
}]
}]
}).then(stories => {
// The rest of your logics here...
});