NestJS中TypeORM仅查询USER_CODE字段返回null问题求助
解决NestJS + TypeORM仅查询指定字段的问题
问题原因
你之前的代码里from(users,'users')存在两个问题:
users是未定义的变量,应该使用实体类Users- 通过
userRepository.createQueryBuilder()创建的查询构建器已经自动关联了Users实体对应的表,无需手动指定from,手动指定反而会破坏默认的实体映射逻辑,导致查询返回null
修正方案
方案一:正确使用QueryBuilder
直接在默认的查询构建器上指定要选择的字段即可:
async signup(body: UsersSignupDto) { const user = await this.userRepository .createQueryBuilder('users') // 指定表别名 .select('users.user_code') .where('users.user_code = :id', { id: '74EQQK' }) .getOne(); console.log(user); // 输出 { user_code: '74EQQK' } }
方案二:使用Repository的select方法(更简洁)
如果不需要复杂查询,直接用Repository内置的select方法更简单:
async signup(body: UsersSignupDto) { const user = await this.userRepository .select(['user_code']) .where({ user_code: '74EQQK' }) .getOne(); console.log(user); // 输出 { user_code: '74EQQK' } }
关键说明
- 当使用
Repository.createQueryBuilder()时,若不指定别名,默认别名是实体类名的小驼峰(比如Users对应user),显式指定别名(如'users')可以让SQL更清晰 getOne()会返回包含指定字段的对象,若需要单独获取字段值,可以改用getRawOne()或者解构对象:const { user_code } = await this.userRepository .select(['user_code']) .where({ user_code: '74EQQK' }) .getOne(); console.log(user_code); // 直接输出 '74EQQK'
内容的提问来源于stack exchange,提问作者tonykrjhc
相关产品推荐
相关产品推荐

