如何执行类似查询Typeorm

时间:2017-12-14 13:29:19

标签: javascript typescript typeorm

大家好我试图找到其中包含的所有结果。我尝试过几种方法,但问题无关紧要。它只返回一个空数组

  var data = await  getRepository(User)
                        .createQueryBuilder("user")
                        .where("user.firstName = %:name%", {name: firstName })
                .getMany();

和类似的东西

 var data = await  getRepository(User)
                            .createQueryBuilder("user")
                            .where("user.firstName like %:name%", {name: firstName })
                    .getMany();

但没有任何效果。所有这些都给我一个空数组。有人可以帮我谢谢

6 个答案:

答案 0 :(得分:18)

正确的方法是:

enumerate

答案 1 :(得分:2)

TypeORM提供了开箱即用的Like函数。示例from their docs:

import {Like} from "typeorm";

const loadedPosts = await connection.getRepository(Post).find({
    title: Like("%out #%")
});

在您的情况下:

var data = await getRepository(User).find({
    name: Like(`%${firstName}%`)
});

答案 2 :(得分:0)

如果您已经使用.find方法来满足存储库需求,则可能不想切换到QueryBuilder。

有一个简单的方法可以使用findConditions实现LIKE过滤器:

this.displayRepository.find({ where: "Display.name LIKE '%someString%'" });

不区分大小写的OR(在postgres中):

this.displayRepository.find({ where: "Display.name ILIKE '%someString%'" });

请记住,这容易受到注入攻击,因此您必须明确保护动态值。

答案 3 :(得分:0)

您还可以使用数据库功能进行串联。例如在postgres中:

 var data = await getRepository(User)
              .createQueryBuilder("user")
              .where("user.firstName like '%' || :name || '%'", {name: firstName })
              .getMany();

答案 4 :(得分:0)

使用存储库,我把它放在 where 中,例如:

await this.userRepository.findAndCount({
      relations: ['roles', 'company'],
      where: `(username like '%${seachValue}%' or firstname like '%${seachValue}%' 
      or lastname like '%${seachValue}%' or email like '%${seachValue}%')`,
      order: {
        [sortField]: sortDirection,
      },
    });

答案 5 :(得分:-1)

var data = await  getRepository(User)
                        .createQueryBuilder("user")
                        .where("user.firstName ILIKE %q, {q:`%${VALUE_HERE}%` })
                .getMany();

这就是我的方法。希望对您有帮助