TypeORM:以一对多关系对记录进行计数
通过 TypeORM 与数据库通信时,会有很多情况需要以一对多的关系对记录进行计数,例如:
- 您想列出用户和属于每个人的照片数量
- 您想列出每个帖子的评论数量的帖子
使用强大的查询生成器,您只需几行代码即可完成。关键是查询方法loadRelationCountAndMap() 。它计算实体关系的实体数量并将值映射到某个实体的属性。或者,您可以添加条件和条件中使用的参数。这些话可能看起来很模糊。下面我们来看一个具体的例子。
在这个例子中,我们创建了 2 个表:user和post(对于一个最小的博客)。一个用户可以有很多帖子,但每个帖子只属于一个用户。
用户实体:
// KindaCode.com
// User entity
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm';
import { Post } from './Post';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToMany(type => Post, post => post.user)
posts: Post[];
}
发布实体:
// KindaCode.com Example
// Post entity
import { Entity, Column, PrimaryGeneratedColumn, ManyToOne } from 'typeorm';
import { User } from './User';
@Entity()
export class Post {
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(type => User, user => user.posts)
user: User;
@Column()
title: string;
@Column()
body: string;
}
以下是我们如何使用每个用户的帖子数检索所有用户:
const userRepository = myDataSource.getRepository(User);
const uwersWithPostCount = await userRepository
.createQueryBuilder('user')
.leftJoinAndSelect('user.posts', 'post')
.loadRelationCountAndMap('user.postCount', 'user.posts') // count posts for each user
.getMany();
console.log('Users with post count: ', uwersWithPostCount);
你会得到类似这样的输出:
Users with post count: [
User {
id: 1,
name: 'Hello Update',
posts: [ [Post], [Post] ],
postCount: 2
},
User { id: 2, name: 'Goodbye Update', posts: [], postCount: 0 }
]
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。