add relations

This commit is contained in:
liuyi 2025-05-20 21:49:34 +08:00
parent 8f87c713dc
commit fb5b6c646c
2 changed files with 30 additions and 1 deletions

View File

@ -1,11 +1,21 @@
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import { CommentEntity } from '@/modules/content/entities/comment.entity';
import { PostEntity } from '@/modules/content/entities/post.entity'; import { PostEntity } from '@/modules/content/entities/post.entity';
import { CustomRepository } from '@/modules/database/decorators/repository.decorator'; import { CustomRepository } from '@/modules/database/decorators/repository.decorator';
@CustomRepository(PostEntity) @CustomRepository(PostEntity)
export class PostRepository extends Repository<PostEntity> { export class PostRepository extends Repository<PostEntity> {
buildBaseQB() { 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');
} }
} }

View File

@ -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<TagEntity> {
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');
}
}