【发布时间】:2022-01-21 10:36:46
【问题描述】:
我有两个具有多对多关系的实体图像和标签
@Entity()
export class Image {
@PrimaryGeneratedColumn()
id: number;
@Column('text', { nullable: true })
caption: string;
@Column('text', { nullable: false })
url: string;
@Column('text', { nullable: false })
thumbnailUrl: string;
@ManyToOne(() => User, {
eager: true,
})
uploader: User;
@JoinTable()
@ManyToMany(() => Tag, (tag: Tag) => tag.images, {
cascade: true,
eager: true,
})
tags?: Tag[];
@CreateDateColumn()
created_at: Date;
@UpdateDateColumn()
updated_at: Date;
和标签实体
@Entity()
export class Tag {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@ManyToMany(() => Image, (image) => image.tags)
images: Image[];
}
现在我想获取流行的标签。为此,请选取过去 7 天内创建的图像数量最多的 10 个标签。为此,我尝试在 tag.repository.ts 中关注
getPopular() {
return (
this.createQueryBuilder('tag')
.addSelect((query) => {
return query
.select('COUNT(I.id)', 'count')
.from('image', 'I')
.where('I.created_at > :date', {
date: DateTime.now().minus({ weeks: 1 }).toISODate(),
});
}, 'imagecount')
.orderBy('imagecount', 'DESC')
.take(10)
.getMany()
);
但这将计算过去 7 天内创建的所有图像,并且不会考虑图像是否具有该标签。那么我应该如何加载关系以便计算带有标签的图像呢?
【问题讨论】: