Node.js 在TypeForm中添加非实体列的OR条件时出现错误:无法确定参数$2的数据类型

Node.js 在TypeForm中添加非实体列的OR条件时出现错误:无法确定参数$2的数据类型,node.js,typescript,postgresql,typeorm,Node.js,Typescript,Postgresql,Typeorm,我想生成postgres查询,如下所示: select * from table1 t1 inner join table2 t2 on t1.id = t2.table1_id where param.name is null or t1.name ilike param.name 这里param是请求参数 我试过这个: await this.userRepository.createQueryBuilder("t1") .innerJoinAndSele

我想生成postgres查询,如下所示:

select * from table1 t1 inner join table2 t2 on t1.id = t2.table1_id
where param.name is null or t1.name ilike param.name
这里param是请求参数

我试过这个:

await this.userRepository.createQueryBuilder("t1")
        .innerJoinAndSelect("t1.table2","t2")
        .where("t1.name ilike :name or :name is null",{ name:`%${request.body.name}%`)
        .getMany()
这将返回以下错误:


QueryFailedError:无法确定参数$2的数据类型

我只是尝试了这个示例,并得到了相同的错误,根据我的经验,我认为这是TypeForm的一个错误

我建议您改变对该问题的看法,尝试以下方法:

await this.userRepository.createQueryBuilder("t1")
        .innerJoinAndSelect("t1.table2","t2")
        .where("t1.name ilike :name",{ name: req.body.name ? `%${request.body.name}%` : '%%')
        .getMany()

这将与提供的查询相同。

我使用下面的查询来满足我的需要:

    await this.userRepository.createQueryBuilder("t1")
               .andWhere(new Brackets(q => {
                    q.where("d.name ilike :name", { name:`%${request.body.name}%`})                      
                    q.orWhere("cast(:param as character varying) is null", { param: request.body.name || null})
                })) 

Postgres可能无法确定:name的类型。当它与ilike部分中的文本进行比较时,它会自动转换,但您可能需要执行。。。。强制转换(:名称为文本)为空。。。。as null没有要转换为的类型。只是一个建议。这能回答你的问题吗?