Nestjs/TypeORM - 如何按列实现自定义搜索
Nestjs/TypeORM - How to implement custom search by column
我正在使用 TypeORM 和 MySQL 一起玩弄 NestJs。
我已经通过 documentation,并且在本地制作了基本的 CRUD 应用程序 运行。
我已经通过 ID 内置搜索(通过存储库),但我还需要通过自定义列实现搜索。
例如我有这个实体:
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
username: string;
@Column()
first_name: string;
@Column()
last_Name: string;
@Column()
gender: string;
在我的存储库中,我有这些内置方法:
async findAll(): Promise<User[]> {
return this.usersRepository.find();
}
findOne(id: string): Promise<User> {
return this.usersRepository.findOne(id);
}
正如预期的那样,它工作得很好。我需要另一个自定义搜索,所以我也可以按用户名搜索,我该如何实现?
我需要这样的东西:
findByUsername(username: string): Promise<User> {
return this.usersRepository.findByUsername(username);
}
我想我必须实现自定义查询,但我不知道在哪里做:(
我通过使用 queryBuilder
设法实现了它
这就是我的函数现在的样子:
findByUsername(username: string): Promise<User | undefined> {
const user = getRepository(User)
.createQueryBuilder("user")
.where("user.username = :username", { username: username })
.getOne();
return user;
}
这是更简单的解决方案:
findByUsername(username: string): Promise<User | undefined> {
return this.usersRepository.findOne({ username });
}
const firstUser = await connection
.getRepository(User)
.createQueryBuilder("user")
.where("user.id = :id", { id: 1 })
.getOne();
您可以使用此代码
findByName(user_name: string): Promise<User> {
return this.usersRepository.findOne({ user_name });
}
我正在使用 TypeORM 和 MySQL 一起玩弄 NestJs。
我已经通过 documentation,并且在本地制作了基本的 CRUD 应用程序 运行。 我已经通过 ID 内置搜索(通过存储库),但我还需要通过自定义列实现搜索。
例如我有这个实体:
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
username: string;
@Column()
first_name: string;
@Column()
last_Name: string;
@Column()
gender: string;
在我的存储库中,我有这些内置方法:
async findAll(): Promise<User[]> {
return this.usersRepository.find();
}
findOne(id: string): Promise<User> {
return this.usersRepository.findOne(id);
}
正如预期的那样,它工作得很好。我需要另一个自定义搜索,所以我也可以按用户名搜索,我该如何实现? 我需要这样的东西:
findByUsername(username: string): Promise<User> {
return this.usersRepository.findByUsername(username);
}
我想我必须实现自定义查询,但我不知道在哪里做:(
我通过使用 queryBuilder
设法实现了它这就是我的函数现在的样子:
findByUsername(username: string): Promise<User | undefined> {
const user = getRepository(User)
.createQueryBuilder("user")
.where("user.username = :username", { username: username })
.getOne();
return user;
}
这是更简单的解决方案:
findByUsername(username: string): Promise<User | undefined> {
return this.usersRepository.findOne({ username });
}
const firstUser = await connection
.getRepository(User)
.createQueryBuilder("user")
.where("user.id = :id", { id: 1 })
.getOne();
您可以使用此代码
findByName(user_name: string): Promise<User> {
return this.usersRepository.findOne({ user_name });
}