多对一/一对多的关系
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from "typeorm";
import { Photo } from "./Photo";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToMany(type => Photo, photo => photo.user)
photos: Photo[];
}
这里我们将添加到photos
属性中,并将目标关系类型指定为Photo
。你也可以在@ManyToOne
/@OneToMany
关系中省略@JoinColumn
。没有@ManyToOne
,@OneToMany
就不可能存在。如果你想使用@OneToMany
,则需要@ManyToOne
。在你设置@ManyToOne
的地方,相关实体将有”关联 id”和外键。
此示例将生成以下表:
const photo1 = new Photo();
photo1.url = "me.jpg";
await connection.manager.save(photo1);
const photo2 = new Photo();
await connection.manager.save(photo2);
const user = new User();
user.name = "John";
user.photos = [photo1, photo2];
await connection.manager.save(user);
或者你可以选择:
启用级联后,只需一次save
调用即可保存此关系。
const userRepository = connection.getRepository(User);
const users = await userRepository.find({ relations: ["photos"] });
// or from inverse side
const photoRepository = connection.getRepository(Photo);
或者使用:
通过在关系上启用预先加载,你不必指定关系或手动加入,它将始终自动加载。