- 创建多对一/一对多关系
创建多对一/一对多关系
让我们创建一个多对一/一对多的关系。假设一个 photo 有一个 author,每个 author 都可以有多个 photos。首先让我们创建一个Author类:
import { Entity, Column, PrimaryGeneratedColumn, OneToMany, JoinColumn } from "typeorm";import { Photo } from "./Photo";@Entity()export class Author {@PrimaryGeneratedColumn()id: number;@Column()name: string;@OneToMany(type => Photo, photo => photo.author) // note: we will create author property in the Photo class belowphotos: Photo[];}
Author 包含反向关系。OneToMany 总是反向的, 并且总是与 ManyToOne一起出现。
现在让我们将关系的所有者方添加到 Photo 实体中:
import { Entity, Column, PrimaryGeneratedColumn, ManyToOne } from "typeorm";import { PhotoMetadata } from "./PhotoMetadata";import { Author } from "./Author";@Entity()export class Photo {/* ... other columns */@ManyToOne(type => Author, author => author.photos)author: Author;}
在多对一/一对多的关系中,拥有方总是多对一的。这意味着使用@ManyToOne的类将存储相关对象的 id。运行应用程序后,ORM 将创建author表:
+-------------+--------------+----------------------------+| author |+-------------+--------------+----------------------------+| id | int(11) | PRIMARY KEY AUTO_INCREMENT || name | varchar(255) | |+-------------+--------------+----------------------------+
它还将修改photo表,添加新的author列并为其创建外键:
+-------------+--------------+----------------------------+| photo |+-------------+--------------+----------------------------+| id | int(11) | PRIMARY KEY AUTO_INCREMENT || name | varchar(255) | || description | varchar(255) | || filename | varchar(255) | || isPublished | boolean | || authorId | int(11) | FOREIGN KEY |+-------------+--------------+----------------------------+
