Связь один ко многим в Nest
Пусть у каждой статьи один автор, а у человека может быть много статей. В базе это одна колонка с числом на стороне материала, а в коде удобнее видеть соседа объектом, а не голым ключом.
Связь «один ко многим» на стороне
«многих» задают полем с пометкой
ManyToOne: тип поля -
класс «одного», а TypeORM сам
создаст колонку с идентификатором.
Обратный массив на «одном» здесь
не нужен: достаточно ссылки
из материала к автору.
Покажем на примере постов:
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Author {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
}
У материала добавим поле соседа и укажем класс автора:
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';
import { Author } from './author.entity.js';
@Entity()
export class Post {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@ManyToOne(() => Author)
author: Author;
}
Обе сущности регистрируем в модуле темы:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Author } from '../author.entity.js';
import { Post } from '../post.entity.js';
@Module({
imports: [TypeOrmModule.forFeature([Post, Author])],
})
export class PostsModule {}
Корень подключает базу с созданием таблиц при старте и импорт модуля постов:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { PostsModule } from './posts/posts.module.js';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'postgres',
database: 'site',
autoLoadEntities: true,
synchronize: true,
}),
PostsModule,
],
})
export class AppModule {}
Опишите связь «один ко многим»
от Worker к Department
на стороне работника, зарегистрируйте
обе сущности в WorkersModule
и подключите модуль к корню
с созданием таблиц при старте.