问题描述
因此,在我的应用程序中,我有相互关联的类别和文章。起初,我检索所有类别,每个类别中都有文章。问题是我想通过 userId
过滤其中的 categories 和 articles 但我不知道该怎么做,因为我正在使用 TypeScript 并得到错误。
const articlesInCategories = (await (await ArticleCategory.fetchAll())
.query((qb: QueryBuilder) => {
qb.innerJoin(Table.ARTICLE_CATEGORY_RELATION,'article_category_relation.category_id','article_category.id' );
qb.innerJoin(Table.ARTICLE,'article.id','article_category_relation.article_id');
// Next condition is only for Categories not for Articles inside it
if (roleId == Role.manager) {
qb.where('user_id',userId);
}
qb.orderBy('id','desc');
})
.fetch({
withRelated: [{'articles': function (qb: QueryBuilder) => qb.where('user_id',userId)}]
}));
例如,如果 userId
是 1
,则只想获取那些 categories,其中包含 id 为 {{1} 的用户撰写的文章 }.此外,并非所有文章,而是仅由 ID 为 1
的用户撰写。
我在 1
附近有 TS 错误:withRelated
在这种情况下,您能否帮助我使用 TypeScript 或建议任何其他方法来实现我想要的?
解决方法
好吧,那是错误的方法。如果我执行以下操作,效果会很棒:
const articlesInCategories = await new ArticleCategory().query((qb: QueryBuilder) => {
.query((qb: QueryBuilder) => {
qb.innerJoin(Table.ARTICLE_CATEGORY_RELATION,'article_category_relation.category_id','article_category.id' );
qb.innerJoin(Table.ARTICLE,'article.id','article_category_relation.article_id');
if (roleId == Role.manager) {
qb.where('user_id',userId);
}
qb.orderBy('id','desc');
})
.fetch({
withRelated: [{ 'articles': (qb: QueryBuilder) => qb.where('user_id',userId) }]
}));