无需 QueryBuilder 的 TypeORM 无重音搜索

问题描述 投票:0回答:1

是否存在一种方法可以在不使用TypeORM中的QueryBuilder的情况下在where条件中搜索值时取消数据库中值的重音?

我没有尝试任何东西,因为没有文档或 FindOperator 存在来取消数据库值的重音

javascript typescript postgresql nestjs typeorm
1个回答
0
投票

在 TypeORM 中,在不使用 QueryBuilder 的情况下使用 where 条件进行搜索时,没有内置支持在数据库中取消重音值。但是,根据您使用的数据库系统,您可能可以利用一些特定于数据库的功能或技术。

例如,如果您使用 PostgreSQL 作为数据库,则可以利用 PostgreSQL 提供的 unaccent 扩展来删除值中的重音符号,然后再在 where 条件中进行比较。要使用此方法,您需要在数据库中启用非重音扩展,然后在查询中使用它。

以下是如何在 PostgreSQL 中实现此目的的示例:

在 PostgreSQL 数据库中启用 unaccent 扩展。您可以通过执行以下 SQL 命令来完成此操作:

CREATE EXTENSION IF NOT EXISTS unaccent;

在查询数据库时,可以使用 PostgreSQL 提供的 unaccent 函数来去除要搜索的值中的重音符号。这是一个例子:

import { getRepository } from 'typeorm';

const userRepository = getRepository(User);
const searchTerm = 'Café'; // The search term with accents

const users = await userRepository
  .createQueryBuilder('user')
  .where('unaccent(user.name) ILIKE unaccent(:term)', { term: `%${searchTerm}%` })
  .getMany();
© www.soinside.com 2019 - 2024. All rights reserved.