cascade: boolean | ("insert" | "update")[] @Entity()
export class Category {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@ManyToMany(type => Question, question => question.categories)
questions: Question[];
}
@Entity()
export class Question {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@Column()
text: string;
@ManyToMany(type => Category, category => category.questions, {
cascade: true // -> cascade option 설정
})
@JoinTable()
categories: Category[];
}
const category1 = new Category();
category1.name = "ORMs";
const category2 = new Category();
category2.name = "Programming";
const question = new Question();
question.title = "How to ask questions?";
question.text = "Where can I ask TypeORM-related questions?";
question.categories = [category1, category2];
await connection.manager.save(question);
casecade: truecategory1, category2에 대해 save 메소드를 호출하지 않아도 자동으로 insert 수행insert, update, remove, soft-remove, recover, etc.save 메소드를 호출할 때 자동으로 수행 됨casecade: ['insert', 'update']@OneToOne 에는 필수propertyName + referencedColumnName로 자동 생성@ManyToOne(type => Category)
@JoinColumn() // -> 'categoryId' 컬럼 생성됨
category: Category;
@ManyToOne(type => Category)
@JoinColumn({ name : 'cat_id' })
category: Category;
referencedColumnName 이용@ManyToOne(type => Category)
@JoinColumn({ referencedColumnName: "name" }) // Category의 PK인'id'가 아닌 'name' 컬럼을 참조
category: Category;
referencedColumnName 설정해야 함@ManyToOne(type => Category)
@JoinColumn([
{ name: "category_id", referencedColumnName: "id" },
{ name: "locale_id", referencedColumnName: "locale_id" }
])
category: Category;
@ManyToMany 에서 사용@ManyToMany(type => Category)
@JoinTable({
name: "question_categories", // table name for the junction table of this relation
joinColumn: {
name: "question",
referencedColumnName: "id"
},
inverseJoinColumn: {
name: "category",
referencedColumnName: "id"
}
})
categories: Category[];
@OneToOne, @JoinColumn 한 쪽에만 선언 (uni-directional)@OneToOne 선언@JoinColumn 한 쪽에만@JoinColumn 생략 가능@OneToMany사용 시, @ManyToOne 필수@ManyToOne 사용 시, @OneToMany 필수 X (@ManyToOne 단독 사용 가능)@JoinTable 사용
find 할 경우, 연관된 관계가 자동으로 로드되어 짐(자동 조인의 개념)find 메소드에서만 작동 @ManyToMany(type => Category, category => category.questions, {
eager: true
})
@JoinTable()
categories: Category[];
@ManyToMany(type => Question, question => question.categories)
questions: Promise<Question[]>;
@ManyToMany(type => Category, category => category.questions)
@JoinTable()
categories: Promise<Category[]>;
@Entity()
export class Category {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@Column()
text: string;
@ManyToOne(type => Category, category => category.childCategories)
parentCategory: Category;
@OneToMany(type => Category, category => category.parentCategory)
childCategories: Category[];
}
Find
1. FindOptions
- where절 relations option 사용
const userRepository = connection.getRepository(User); const users = await userRepository.find({ relations: ['photos']});2. QueryBuilder
- join 사용
const users = await connection .getRepository(User) .createQueryBuilder('user') .leftJoinAndSelect('user.photos', 'photo') .getMany();
This article is simple to read and enjoyable, without omitting any of the important details. word finder
Thank you for sharing this wonderful resource! It's really helpful and informative.
@AllFreeNovel.cc
This post is easy to read and appreciate without leaving out any details. Excellent work!
@geometry dash