Как в TypeORM под MariaDB сделать поле с массивом из перечисления?

В TypeORM существует возможность создания полей с массивом перечисления для различных баз данных, включая MariaDB. Для того, чтобы создать такое поле, вам потребуется выполнить несколько шагов.

1. Определите перечисление:

enum Fruit {
  APPLE = 'apple',
  BANANA = 'banana',
  ORANGE = 'orange',
}

2. Создайте новую сущность, в которой будет использоваться поле с массивом из перечисления:

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class MyEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column('enum', {
    enum: Fruit,
    array: true,
    default: [],
  })
  fruits: Fruit[];
}

Важно отметить, что в @Column вы указываете тип enum и добавляете свойство array: true, чтобы указать, что это поле будет массивом.

3. Настройте подключение к базе данных в файле app.module.ts (или там, где у вас настроена конфигурация TypeORM):

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mariadb',
      host: 'localhost',
      port: 3306,
      username: 'username',
      password: 'password',
      database: 'database_name',
      entities: [MyEntity],
      synchronize: true,
    }),
  ],
})
export class AppModule {}

Обратите внимание на импорт TypeOrmModule.forRoot и добавление MyEntity в entities.

4. Теперь, когда вы настроили все необходимое, вы можете использовать вашу сущность MyEntity для взаимодействия с базой данных MariaDB.

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { MyEntity, Fruit } from './path-to-my-entity';

@Injectable()
export class MyService {
  constructor(
    @InjectRepository(MyEntity)
    private myEntityRepository: Repository<MyEntity>,
  ) {}

  async createMyEntity(): Promise<MyEntity> {
    const myEntity = new MyEntity();
    myEntity.fruits = [Fruit.APPLE, Fruit.BANANA];

    return this.myEntityRepository.save(myEntity);
  }
}

В этом примере мы создаем экземпляр MyEntity и устанавливаем поле fruits в массив [Fruit.APPLE, Fruit.BANANA]. Затем мы сохраняем его с помощью метода myEntityRepository.save().

Таким образом, вы настроили поле с массивом из перечисления в TypeORM под MariaDB и можете использовать его для хранения и извлечения данных в базе данных.