TypeORM中如何获取设置了select:false的未选中列?
获取设置了select:false的User实体password字段
你在User实体中将password字段的select属性设为false,这会让TypeORM默认查询时不返回该字段。要在查询时获取password,有以下几种修改方式:
方法1:使用findOne并指定select选项
将findOneBy替换为findOne,通过select数组显式包含需要查询的字段(包括password):
const user = await this.userRepository.findOne({ where: { email: loginInput.email, is_verify: true }, select: ["id", "userName", "email", "password"] // 按需列出字段,必须包含password }); console.log(user);
方法2:使用QueryBuilder构建查询
通过createQueryBuilder手动添加password字段到查询中,这种方式更灵活:
方式A:指定所有需要的字段
const user = await this.userRepository .createQueryBuilder("user") .select(["user.id", "user.userName", "user.email", "user.password"]) .where("user.email = :email", { email: loginInput.email }) .andWhere("user.is_verify = :isVerify", { isVerify: true }) .getOne(); console.log(user);
方式B:仅追加password字段
如果需要保留默认查询的其他字段,只需单独添加password:
const user = await this.userRepository .createQueryBuilder("user") .addSelect("user.password") .where({ email: loginInput.email, is_verify: true }) .getOne(); console.log(user);
注意事项
- password属于敏感字段,仅在登录验证等必要场景下查询,避免不必要的返回以降低数据泄露风险。
- 不建议直接修改实体中
select: false为true,这会导致所有默认查询都返回password,存在安全隐患。
内容的提问来源于stack exchange,提问作者Md Ali
相关产品推荐
相关产品推荐

