在 WHERE 条件中传递未定义值的行为与 typeorm 中的 true/匹配条件相同

swa*_*tij 5 typescript typeorm nestjs

我发现了 typeorm 的这种奇怪行为,即如果 FIND 查询(find、findOne、findBy 等)的 WHERE 子句的条件中的属性未定义,那么它的行为就像一个真实的条件并返回记录(findOne 的第一条记录)以及查找的所有记录)。

我知道可以使用验证器或 IF 语句来检查未定义的属性来防止这种情况,但除此之外,我想知道 typeorm 本身处理它的直接方法。

这是我正在做的事情:

const client = await this.clientRepository.findOne({
        where: {
          id: payload.clientId //undefined
        }
      });
Run Code Online (Sandbox Code Playgroud)

我获得了客户端表的第一条记录,即使 clientId 未定义。

小智 4

这是一个已知的问题

使用 typeORM 本身最简单的解决方案是使用Equal()typeORM 的函数。

const client = await this.clientRepository.findOne({
        where: {
          id: Equal(payload.clientId)
        }
});
Run Code Online (Sandbox Code Playgroud)