Жадная загрузка в Nest
Пусть каждый запрос списка должен отдавать автора, и легко забыть добавить блок связей в опцию выборки. Тогда клиент снова видит запись без соседнего объекта.
На поле ManyToOne можно
поставить eager со значением
true. TypeORM тогда сам
присоединит таблицу автора
при любом чтении поста, даже
если опция связей не указана.
Покажем на примере постов:
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.posts, { eager: true })
author: Author;
}
Сервис запрашивает список без отдельного блока связей - автор уже лежит в объекте:
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Post } from '../post.entity.js';
@Injectable()
export class PostService {
constructor(
@InjectRepository(Post) private postRepository: Repository<Post>,
) {}
getPosts(): Promise<Post[]> {
return this.postRepository.find();
}
}
Модуль темы и корень с синхронизацией схемы:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Author } from '../author.entity.js';
import { Post } from '../post.entity.js';
import { PostService } from './post.service.js';
@Module({
imports: [TypeOrmModule.forFeature([Post, Author])],
providers: [PostService],
})
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 {}
Включите жадную подгрузку
Department у Worker,
сделайте выборку без блока
связей, зарегистрируйте
сущности в WorkersModule
и подключите модуль к корню
с созданием таблиц при старте.