Postgres环境下FindOne函数无法正常工作问题求助
问题解决方法
你的代码核心问题是参数类型和传递逻辑完全错误,导致findOne无法识别有效的查询条件,具体修正如下:
错误原因
- 控制器中
@Param('id')获取的是URL路径里的单个id值(字符串/数字类型),但你错误地将其声明为FindOneOptions<Company>类型,传入服务层的根本不是符合要求的查询配置对象。 - 服务层的
get方法参数类型错误,接收的不是实际id值,而是被错误类型声明的参数,最终导致findOne调用时没有正确的查询条件。
修正后的代码
company.controller.ts
@Get(':id') // 根据你的Company实体主键类型修改id的类型(比如number或string) findOneCompany(@Param('id') id: number){ return this.companyService.get(id); }
company.service.ts
// 对应控制器传入的id类型,构造正确的查询条件 async get(id: number): Promise<Company | null>{ console.log(id) return await this.companyRespository.findOne({ where: { id } // 这里的id要和你Company实体中的主键字段名完全一致 }); }
补充说明
如果你的TypeORM版本较旧,findOne支持直接传入id值,服务层代码也可以简化为:
async get(id: number): Promise<Company | null>{ console.log(id) return await this.companyRespository.findOne(id); }
但推荐使用FindOneOptions的where配置写法,更清晰且兼容新版本TypeORM。
内容的提问来源于stack exchange,提问作者Chickrees
相关产品推荐
相关产品推荐

