Как выбрать записи, имеющие массив, содержащий переданную строку из postgres / typeorm - PullRequest
0 голосов
/ 29 мая 2020

Ниже приведена запись в таблице -

enter image description here

Мне нужно выбрать записи на основе пакетов (последний столбец). У меня есть конечная точка вроде -

http://localhost:3000/batch/Batch 3

Это мой контроллер, он отлично работает и перенаправляет вызов в службу -

@Get('/batch/:batchName')
  getByBatch(@Param('batchName') batch): Promise<Assignment[]> {
    return this.assignmentService.getByBatch(batch);
  }

Это моя служба -

async getByBatch(batch: string): Promise<Batch[]> {
    return await getRepository(Assignment)
      .createQueryBuilder('a')
      .where('a.batches CONTAINS :batch', { batch: batch })
      .getMany();
  }

Я не уверен, как в этом случае будет сформирован запрос. Я использую typeorm и postgres. Для простых запросов я напрямую использовал репозиторий, например -

return this.assgRepository.findOne({ id: id });

Ниже приведен объект -

@PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @Column()
  description: string;

  @Column({ array: true })
  batches: string;

  @Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
  createdAt: string;

Мне нужно передать пакет и получить записи, которые когда-либо содержали этот пакет.

PS Если бы вы могли указать мне, как я могу обновить batches, было бы здорово.

1 Ответ

1 голос
/ 07 июня 2020

@ Column ({type: "simple-array"}) batch: string;

партии должны сохраняться в форме ["batch 1", "batch 2"], а не в виде [{" партия 1 "," партия 2 "}]

наконец запрос

где (" a.batches IN (: ... batch) ", {batch: [" batch 1 "]} )

...