53

大家好,我正在尝试查找其中包含的所有结果。我尝试了几种方法,但问题是没有任何效果。它只返回一个空数组

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();

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

4

5 回答 5

110

正确的做法是:

 var data = await getRepository(User)
                  .createQueryBuilder("user")
                  .where("user.firstName like :name", { name:`%${firstName}%` })
                  .getMany();
于 2017-12-15T12:38:48.580 回答
73

TypeORM 提供了开箱即用的Like功能。他们的文档中的示例

import {Like} from "typeorm";

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

在你的情况下:

var data = await getRepository(User).find({
    name: Like(`%${firstName}%`)
});
于 2019-03-07T12:36:44.763 回答
3

您还可以使用数据库函数进行连接。例如在 postgres 中:

 var data = await getRepository(User)
              .createQueryBuilder("user")
              .where("user.firstName like '%' || :name || '%'", {name: firstName })
              .getMany();
于 2019-08-05T13:11:01.640 回答
0
var data = await  getRepository(User)
                        .createQueryBuilder("user")
                        .where("user.firstName ILIKE %q, {q:`%${VALUE_HERE}%` })
                .getMany();

我就是这样做的。希望能帮助到你

于 2020-06-18T14:52:32.170 回答
-1

使用存储库我把它放在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,
      },
    });
于 2021-05-09T08:04:29.817 回答