들어가기
typeOrm사용시 관련된 data들을 불러올떄,
relations:{
restaurant:true}
등으로 사용했지만,
entity에 eager:true를 찍어주면, typeOrm에
relations을 설정해 주지 않아도,
자동적으로 관련 data들을 같이 load한다.
나중에 너무 많은 data가 load되면, server과부하가
문제될 수 있으니, 참고한다.
NOTICE!!!
eager는 설정을 하면 양쪽에 다 적용되기 때문에, 한쪽만 설정해 주면 된다.
order entity에서 restaurant에 eager:true 했으면,
restaurant entity에서는 eager:true를 해 주지 않아도됨.
import {
Field,
Float,
InputType,
ObjectType,
registerEnumType,
} from '@nestjs/graphql';
import { IsEnum } from 'class-validator';
import { CoreEntity } from 'src/common/entities/core.entity';
import { Restaurant } from 'src/restaurant/entities/restaurant.entity';
import { User } from 'src/users/entities/user.entity';
import {
Column,
Entity,
JoinTable,
ManyToMany,
ManyToOne,
RelationId,
} from 'typeorm';
import { OrderItem } from './order-item.entity';
export enum OrderStatus {
Pending = 'Pending',
Cooking = 'Cooking',
Cooked = 'Cooked',
PickedUp = 'PickedUp',
Deliverd = 'Deliverd',
}
registerEnumType(OrderStatus, { name: 'OrderStatus' });
@InputType('OrderInputType', { isAbstract: true })
@ObjectType()
@Entity()
export class Order extends CoreEntity {
@Field(() => User, { nullable: true })
@ManyToOne(() => User, (user) => user.orders, {
onDelete: 'SET NULL',
nullable: true,
eager: true, =======>order를 call하면, customer 같이 불려짐
})
customer?: User;
@RelationId((order: Order) => order.customer)
customnerId: number;
@Field(() => User, { nullable: true })
@ManyToOne(() => User, (user) => user.rides, {
onDelete: 'SET NULL',
nullable: true,
eager: true, =======>order를 call하면, driver도 같이 불려짐
})
driver?: User;
@RelationId((order: Order) => order.driver)
driverId: number;
@Field(() => Restaurant, { nullable: true })
@ManyToOne(() => Restaurant, (restaurant) => restaurant.orders, {
onDelete: 'SET NULL',
nullable: true,
eager: true, =======>order를 call하면, restaurant도 같이 불려짐
})
restaurant: Restaurant;
@Field(() => [OrderItem])
@ManyToMany(() => OrderItem, { eager: true })
@JoinTable()
items: OrderItem[];
@Column({ nullable: true })
@Field(() => Float, { nullable: true })
total?: number;
@Column({ type: 'enum', enum: OrderStatus, default: OrderStatus.Pending })
@Field(() => OrderStatus)
@IsEnum(OrderStatus)
status: OrderStatus;
}