Как вставить вычисленные данные в базу данных с миграциями TypeORM? - PullRequest
0 голосов
/ 17 марта 2020

У меня есть ситуация, когда мне нужно добавить новый столбец в существующую таблицу в TypeORM. Я установил для столбца значение nullable, поскольку в таблице есть существующие элементы, для которых необходимо добавить данные для этого столбца, прежде чем я смогу установить для столбца значение, которое не может быть обнуляемым.

Я пытался написать Файл миграции для вставки данных в новый столбец для каждой строки таблицы, но, похоже, он не сохраняется.

Это то, что я сейчас пытаюсь:

import { MigrationInterface, QueryRunner } from 'typeorm';
import { Customer } from '../../entities';
import { generateUrlName } from '../../entities/Customer';

export class fixUrlNameCustomers1584393813738 implements MigrationInterface {
  name = 'fixUrlNameCustomers1584393813738';

  public async up(queryRunner: QueryRunner): Promise<void> {
    const customers = await queryRunner.manager.find(Customer);

    const updatedCustomers = customers.map(customer => {
      customer.url_name = generateUrlName(customer.name);
      return customer;
    });

    await queryRunner.manager.save(updatedCustomers);
  }

  public async down(queryRunner: QueryRunner): Promise<void> {}
}

Как Вы можете видеть, я пытаюсь заполнить '.url-name' для каждого клиента, используя функцию generateUrlName. После запуска этой миграции и выполнения запроса из Postgres я вижу, что миграция не сохраняет данные.

...