按订阅获取文章列表



我正试图使一个过滤器,我可以得到订阅记录

实体"订阅">

export class Subscription {
@PrimaryColumn()
id: string;
@Column('uuid')
userId: string;
@Column('uuid')
targetUserId: string;
@CreateDateColumn()
createdAt: Date;
}

过滤器

applyFilter(query: QueryArticle, qb: SelectQueryBuilder<Article>, userId?: string) {
if (query.filter) {
switch (query.filter) {
....
case 'subscriptions':
qb.select(
`article.authorId WHERE targetUserId IN (SELECT targetUserId FROM Subscription WHERE userId=${userId})`,
);
break;
}
}
return qb;
}

SQL代码

Select * FROM article WHERE authorId=targetUserId IN (SELECT targetUserId FROM Subscription WHERE userId=userId)

误差

syntax error at or near "f5779e5" +3974ms
QueryFailedError: syntax error at or near "f5779e5"

我怎么能得到所有人的帖子后面跟着一个人用TypeORM吗?

提前感谢您的回答!

不要做你正在做的事. 您正在冒着SQL注入的风险。如果你真的想做一个手工查询,你可以做manager.query:

const output = manager.query('article."authorId" WHERE "targetUserId" IN (SELECT "targetUserId" FROM Subscription WHERE "userId" = :userId)',
{ userId: userId }
);

注意第二个参数,它包含了由键:userId引用的参数。如果你使用模板字符串查询,你可能做错了什么。

如果你想使用QueryBuilder,那么它将看起来有点不同(更多关于QueryBuilder的信息在这里)

const output = articleRepo.createQueryBuilder('article')
.select('article.authorId')
.where('article."authorId" IN (SELECT "targetUserId" FROM subscription WHERE "userId" = :userId)',
{ userId: userId }
)
.getRawMany(); // If you remove the .select('article.authorId'), you can use .getMany()

最新更新