关系常见问题
如何创建自引用关系
自引用关系是与自身有关系的关系。 当你将实体存储在树状结构中时,这会非常有用。 "adjacency list"模式也使用自引用关系来实现。 例如,你想在应用程序中创建 categories 树。 Categories 可以嵌套 categories,嵌套类别可以嵌套其他类别等。 自引用关系在这里很方便。 基本上,自引用关系只是针对实体本身的常规关系。 例如:
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, OneToMany } from "typeorm";
@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[];
}
如何使用关系id而不加入关系
有时你希望在相关联系的对象 ID 中建立关系而不加载它。 例如:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class Profile {
@PrimaryGeneratedColumn()
id: number;
@Column()
gender: string;
@Column()
photo: string;
}
import { Entity, PrimaryGeneratedColumn, Column, OneToOne, JoinColumn } from "typeorm";
import { Profile } from "./Profile";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToOne(type => Profile)
@JoinColumn()
profile: Profile;
}
当加载没有profile
加入的用户时,你将无法在用户对象中获得有关个人资料的任何信息,
甚至个人资料 ID:
User {
id: 1,
name: "Umed"
}
但有时您想知道此用户的"profile id"是什么,而不加载此用户的全部个人资料。
要做到这一点,你只需要使用@Column
向实体添加另一个属性完全命名为自己关系创建的列。
例如:
import { Entity, PrimaryGeneratedColumn, Column, OneToOne, JoinColumn } from "typeorm";
import { Profile } from "./Profile";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column({ nullable: true })
profileId: number;
@OneToOne(type => Profile)
@JoinColumn()
profile: Profile;
}
就这样,下次加载用户对象时,它将包含一个配置文件 ID:
User {
id: 1,
name: "Umed",
profileId: 1
}