반응형
nest.js + mysql2
조합으로 테이블 join 을 하려고 했다가.. 시간을 너무 많이 허비해서 글로 작성해두기로 했다.
1. 테이블 관계는 아래와 같다.
2. 각 파일 내용과 중요 내용
여기서 중요한 것은
class_list(class_cd) : class_item_list(class_cd) 의 관계는 1:N 이다.
때문에
class_list.entity.ts 파일의 class_cd는 반드시 OneToMany 를 주입 시켜 주어야하며,
class_item_list.entity.ts 의 class_cd 에는ManyToOne 을 주입 시켜줘야하고, 추가적으로 JoinColumn 도 주입 시켜 줘야한다.
2-1) class_list.entity.ts
import { Entity, Column, OneToMany, JoinColumn, PrimaryColumn } from 'typeorm';
import { ClassItemList } from '../class_item_list/class_item_list.entity'
@Entity({ schema: 'dkdoctor_pet_exam', name: 'class_list' })
export class ClassList {
@PrimaryColumn({ name: 'class_cd'})
classCd: string;
@Column({ name: 'value'})
value: string;
@OneToMany(()=>ClassItemList, classItemList => classItemList.classCd)
classItemList: ClassItemList[];
}
2-2) class_item_list.entity.ts
import { Entity, Column, PrimaryGeneratedColumn, JoinColumn, OneToMany, ManyToOne, PrimaryColumn } from 'typeorm';
import { ClassList } from '../class_list/class_list.entity';
@Entity({ schema: 'dkdoctor_pet_exam', name: 'class_item_list' })
export class ClassItemList {
@PrimaryGeneratedColumn({ name: 'class_item_id' })
classItemId: bigint;
@ManyToOne(()=>ClassList, classList => classList.classCd)
@JoinColumn({ name: 'class_cd'})
@Column({ name: 'class_cd'})
classCd: string;
@Column({ name: 'value'})
value: string;
@Column({ name: 'comment'})
comment: string;
}
2-3) class_list.module.ts
// class_list.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ClassList } from './class_list.entity';
import { ClassListService } from './class_list.service';
@Module({
imports: [TypeOrmModule.forFeature([ClassList])],
exports: [TypeOrmModule],
providers: [ClassListService]
})
export class ClassListModule {}
2-4) class_list.service.ts
@Injectable()
export class ClassListService {
constructor(
@InjectRepository(ClassList)
private classListRepository: Repository<ClassList>, // UserRepository 주입
) {}
findClassInfo(classCd : String): Promise<ClassList> {
return this.classListRepository.createQueryBuilder('m')
.leftJoinAndSelect('m.classItemList', 't')
.where('m.classCd = :classCd', {classCd: classCd})
.getOne();
}
async remove(id: number): Promise<void> {
await this.classListRepository.delete(id);
}
}
2-5) app.module.ts
@Module({
imports: [
..., ClassListModule
],
controllers: [AppController],
providers: [
AppService, ClassListService
],
})
export class AppModule {}
2-6) app.controller.ts
@Controller()
export class AppController {
...
@Get('url')
@Render('file name')
async getRegisterStepOne() {
const result = await this.classListService.findClassInfo('param');
return { key: result };
}
...
}
반응형
'Programming > Node.js' 카테고리의 다른 글
[Nest.js] Handlebars template in hbs(Handlebars) (0) | 2024.11.26 |
---|---|
[Nest.js] AWS DB Tunneling With Mysql Setting (터널링 및 Mysql 설정) (2) | 2024.11.24 |
[MongoDB] 랜섬웨어 (READ__ME_TO_RECOVER_YOUR_DATA) (0) | 2024.04.06 |
[Node.js/mongoose DB] cascade delete 기능 구현하기 (0) | 2021.12.10 |
[Node.js/AdminBro] Admin Page panel + MongoDB (0) | 2021.10.27 |