РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsPmRnEL 163 of 168 menu
◀ ▶

Жадная загрузка в 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 и подключите модуль к корню с созданием таблиц при старте.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить