반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Flutter
- 코테공부
- 자바공부
- 스프링
- 스프링공부
- querydsl
- 스프링 공부
- Axon framework
- nestjs공부
- 플러터 공부
- JPA예제
- 스프링부트
- 플러터 개발
- 기술공부
- nestjs
- JPA공부
- K8S
- JPA 공부
- 프로그래머스
- 자료구조공부
- 알고리즘공부
- JPA스터디
- 코테준비
- 기술면접공부
- Kafka
- 카프카
- DDD
- nestjs스터디
- 스프링부트공부
- JPA
Archives
- Today
- Total
DevBoi
[NestJs] 매핑 테이블 엔티티 생성 및 사용 본문
반응형
엔티티간의 다대다 관계인 경우, 해당 매핑 테이블을 생성하는 것이 좋은데
매핑 테이블을 엔티티로 선언하는 것보다, 해당 역할을 하는 엔티티를 생성하는 것이 좋다.
1) 매핑 엔티티
import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, JoinColumn, OneToOne, ManyToOne } from 'typeorm';
import { Member } from 'src/member/entities/member.entity';
import { Campaign } from 'src/campaign/entities/campaign.entity';
import { CampaignMemberResDto } from '../dto/campaign-member.res.dto';
import { Exclude } from 'class-transformer';
@Entity()
export class CampaignMember {
@PrimaryGeneratedColumn()
@Exclude({ toPlainOnly: true })
id: number
@ManyToOne(() => Member, {
onDelete: 'CASCADE', // decide on delete logic
eager: true
})
member: Member;
@ManyToOne(() => Campaign, {
onDelete: 'CASCADE', // decide on delete logic
eager: true
})
campaign: Campaign;
@Column()
authCode: number;
makeResponse() :CampaignMemberResDto{
return new CampaignMemberResDto(this);
}
}
2) 기존 엔티티 수정 예시 (campaignMember 추가)
import { Corp } from 'src/corp/entities/corp.entity';
import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, JoinColumn, OneToOne, ManyToOne, Generated, OneToMany } from 'typeorm';
import { IsEmail, IsNumber } from 'class-validator';
import { MemberReqDto } from '../dto/member.req.dto';
import { Schedule } from 'src/schedule/entities/schedule.entity';
import { CampaignMember } from 'src/campaign-member/entities/campaign-member.entity';
@Entity()
export class Member {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column(IsEmail)
email: string;
@Column()
name: string;
@Column()
nickname: string;
@Column(IsNumber)
phoneNumber: number;
@Column({default: ''})
deviceInfo: string;
@CreateDateColumn()
regdate : Date; //생성일자
@Column()
authCode: number;
@OneToMany(() => Schedule, (schedule) => schedule.member)
schedule: Schedule[]
@Column()
password: string;
@OneToMany(() => CampaignMember, campainMember => campainMember.member, {
nullable: true,
cascade: true,
})
campaignMember: CampaignMember[];
constructor(input?: MemberReqDto, member?: Member){
if(input){
this.name = input.name;
this.nickname = input.nickname;
this.email = input.email;
this.phoneNumber = input.phoneNumber;
this.authCode = input.authCode;
this.password = input.password;
if(this.deviceInfo){
this.deviceInfo= input.deviceInfo;
}
}
}
}
3) queryBuilder로 해당 데이터 조회 select 뒤에, leftJoin이나 별도 조인설정을 줄 수도있다.
async findMemberList(id: number): Promise<CampaignMember[]> {
return await this.campaignRepository.createQueryBuilder('campaign_member')
.select('memberId,campaignId,authCode')
.where('campaign_member.campaignId = :id',{id: id})
.getRawMany();
}
}
결과
반응형
'Develop > [NestJs]' 카테고리의 다른 글
[NestJs] QueryBuilder (0) | 2023.07.09 |
---|---|
[NestJs] AuthGuard 전략 복수개 적용하기 (0) | 2023.07.04 |
[NestJs] 암호화 모듈 (0) | 2023.07.03 |
[NestJs] Custom Pipeline 만들어보기 (0) | 2023.07.02 |
[NestJs] TypeORM 로딩타입 변경하기 (0) | 2023.07.01 |