TypeOrm:选择包含数组中所有值的结果

TypeOrm: Selecting results that contain all values in array

我在从 Typeorm 查询中获取我想要的数据时遇到了一些问题。

基本上,我们有一个搜索栏供用户搜索我们的产品(药物)数据库。我想 select 数据库中包含用户输入的每个单词的所有记录。 (这些词被分成一组值。)它可能与产品名称不完全匹配,所以我想我应该使用 LIKE?

数据库中有英文、日文和中文的结果。我想搜索英文名 (nameEn)、日文名 (nameJa) 和中文名 (nameZh) 以获取包含所有用户搜索查询的任何结果。

我不确定如何以编程方式循环搜索查询并同时为 Typeorm 构建查询。

当前代码:

const medicines = await getRepository(Medicine)
  .createQueryBuilder('medicine')
  .where('medicine.nameEn like :query', { query: '%bufferin%' })
  .andWhere(
    new Brackets((qb) => {
      qb.where('medicine.nameEn like :query1', {
        query1: '%luna%',
      }).orWhere('medicine.nameEn like :query2', { query2: 'EX' });
    }),
  )
  .getMany();

这适用于获得匹配的英文产品...但现在我只是在查询“bufferin luna EX”中硬编码。如果它是 ['bufferin', 'luna', 'EX'],并且还想检查 nameJanameZh,我该怎么做?

非常感谢您的宝贵时间。

经过更多测试后,我想出了一种动态执行此操作的方法,方法是保存 Select 查询生成器的实例,然后为每个查询添加 .andWhere 链。发布代码以防将来对任何人有帮助。

// get instance of Select Query Builder
let builder = await getRepository(Items)
  .createQueryBuilder('item')

// validating data
  .where('item.categoryId is not null')
  .andWhere('item.companyId is not null');
    

queries.map((query, index) => {
  const queryName = `query_${index}`;
  const escapedQuery = escapeLikeString(query);

  builder = builder   
  .andWhere(`item.nameEn like :${queryName}`, { [queryName]: `%${escapedQuery}%` })
  .orWhere(`item.nameJa like :${queryName}`, { [queryName]: `%${escapedQuery}%` })
  .orWhere(`item.nameZh like :${queryName}`, { [queryName]: `%${escapedQuery}%` })
});
    
  const items = await builder.getMany();