【发布时间】:2020-11-12 15:26:05
【问题描述】:
我有两个模型:Articles 和 Tags。这些模型通过belongsToMany相互关联,所以一篇文章可能有很多标签,标签可以被很多文章使用。
模型
Articles.belongsToMany(Tags, {
foreignKey: 'articleId',
as: 'tags',
});
Tags.belongsToMany(Articles, {
foreignKey: 'tagId',
as: 'articles',
});
查询时,我需要获取以searchTag为标签的文章,但获取与文章相关的所有标签信息。
我尝试的是:
const articles = await Articles.findAll({
include: [{
model: Tags,
as: 'tags',
where: {
tag: searchTag,
},
attributes: ['id', 'tag'],
required: true,
}],
where: {
// querying condition
},
});
但是这段代码只获取到匹配的标签,无法获取到属于该文章的所有标签。
我认为的另一个解决方案是检查tag=searchTag 是否存在于tags 中的任何标签,但我不知道如何将此条件放入sequelize 对象中。将这种条件适合 sequelize 对象的正确方法是什么?或者除了获取所有具有searchedTag 的文章的ids 并获取基于ids 的所有文章之外的任何其他方式来解决此问题?
【问题讨论】:
标签: node.js sequelize.js