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

Получение связанных записей в Nest

Пусть строки уже лежат в базе с заполненным ключом соседа, а сервис возвращает только поля самой записи. Поле author в ответе пустое, хотя связь в схеме есть.

По умолчанию TypeORM не тянет соседние таблицы: экономится трафик и время. Чтобы получить объект автора в каждом посте, в опции выборки добавляют блок relations с именем поля связи.

Покажем на примере постов:

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) 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({ relations: { author: true }, }); } }

Модуль темы регистрирует обе сущности и сервис:

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 {}

Сделайте выборку списка Worker с подгруженным Department, зарегистрируйте сущности в WorkersModule и подключите модуль к корню с созданием таблиц при старте.

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