From fb5b6c646c79181f328b9f8ede38ba6f7e5e563a Mon Sep 17 00:00:00 2001 From: liuyi Date: Tue, 20 May 2025 21:49:34 +0800 Subject: [PATCH] add relations --- .../content/repositories/post.repository.ts | 12 +++++++++++- .../content/repositories/tag.repository.ts | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 src/modules/content/repositories/tag.repository.ts diff --git a/src/modules/content/repositories/post.repository.ts b/src/modules/content/repositories/post.repository.ts index 80835dc..3ab8efa 100644 --- a/src/modules/content/repositories/post.repository.ts +++ b/src/modules/content/repositories/post.repository.ts @@ -1,11 +1,21 @@ import { Repository } from 'typeorm'; +import { CommentEntity } from '@/modules/content/entities/comment.entity'; import { PostEntity } from '@/modules/content/entities/post.entity'; import { CustomRepository } from '@/modules/database/decorators/repository.decorator'; @CustomRepository(PostEntity) export class PostRepository extends Repository { buildBaseQB() { - return this.createQueryBuilder('post'); + return this.createQueryBuilder('post') + .leftJoinAndSelect('post.category', 'category') + .leftJoinAndSelect('post.tags', 'tags') + .addSelect((query) => { + return query + .select('COUNT(c.id)', 'count') + .from(CommentEntity, 'c') + .where('c.post.id = post.id'); + }, 'commentCount') + .loadRelationCountAndMap('post.commentCOunt', 'post.comments'); } } diff --git a/src/modules/content/repositories/tag.repository.ts b/src/modules/content/repositories/tag.repository.ts new file mode 100644 index 0000000..5bf9646 --- /dev/null +++ b/src/modules/content/repositories/tag.repository.ts @@ -0,0 +1,19 @@ +import { Repository } from 'typeorm'; + +import { PostEntity } from '@/modules/content/entities/post.entity'; +import { TagEntity } from '@/modules/content/entities/tag.entity'; +import { CustomRepository } from '@/modules/database/decorators/repository.decorator'; + +@CustomRepository(TagEntity) +export class TagRepository extends Repository { + buildBaseQB() { + return this.createQueryBuilder('tag') + .leftJoinAndSelect('tag.posts', 'posts') + .addSelect( + (query) => query.select('COUNT(p.id)', 'count').from(PostEntity, 'p'), + 'postCount', + ) + .orderBy('postCount', 'DESC') + .loadRelationCountAndMap('tag.postCount', 'tag.posts'); + } +}