我正在使用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);
}
我假设我必须实现自定义查询,但是我不知道在哪里做:(
答案 0 :(得分:1)
这是更简单的解决方案:
findByUsername(username: string): Promise<User | undefined> {
return this.usersRepository.findOne({ username });
}
答案 1 :(得分:1)
您可以使用此代码
findByName(user_name: string): Promise<User> {
return this.usersRepository.findOne({ user_name });
}
答案 2 :(得分:0)
我设法通过使用queryBuilder
实现了这一目标这就是我的函数现在的样子:
findByUsername(username: string): Promise<User | undefined> {
const user = getRepository(User)
.createQueryBuilder("user")
.where("user.username = :username", { username: username })
.getOne();
return user;
}
答案 3 :(得分:-1)
const firstUser = await connection
.getRepository(User)
.createQueryBuilder("user")
.where("user.id = :id", { id: 1 })
.getOne();