• 创建一对一的关系

    创建一对一的关系

    让我们与另一个类创建一对一的关系。先在PhotoMetadata.ts中创建一个新类。此 PhotoMetadata 类应包含 photo 的其他元信息:

    1. import { Entity, Column, PrimaryGeneratedColumn, OneToOne, JoinColumn } from "typeorm";
    2. import { Photo } from "./Photo";
    3. @Entity()
    4. export class PhotoMetadata {
    5. @PrimaryGeneratedColumn()
    6. id: number;
    7. @Column("int")
    8. height: number;
    9. @Column("int")
    10. width: number;
    11. @Column()
    12. orientation: string;
    13. @Column()
    14. compressed: boolean;
    15. @Column()
    16. comment: string;
    17. @OneToOne(type => Photo)
    18. @JoinColumn()
    19. photo: Photo;
    20. }

    这里我们使用了一个名为@OneToOne的新装饰器,它允许我们在两个实体之间创建一对一的关系。type => Photo是一个函数,返回我们想要与之建立关系的实体的类。由于特定于语言的关系,我们只能使用一个返回类的函数,而不是直接使用该类。同时也可以把它写成()=> Photo,但是type => Photo显得代码更有可读性。type 变量本身不包含任何内容。

    我们还添加了一个@JoinColumn装饰器,表明实体键的对应关系。关系可以是单向的或双向的。但是只有一方是拥有者。在关系的所有者方面需要使用@JoinColumn 装饰器。

    如果运行该应用程序,你将看到一个新生成的表,它将包含一个带有关系外键的列:

    1. +-------------+--------------+----------------------------+
    2. | photo_metadata |
    3. +-------------+--------------+----------------------------+
    4. | id | int(11) | PRIMARY KEY AUTO_INCREMENT |
    5. | height | int(11) | |
    6. | width | int(11) | |
    7. | comment | varchar(255) | |
    8. | compressed | boolean | |
    9. | orientation | varchar(255) | |
    10. | photoId | int(11) | FOREIGN KEY |
    11. +-------------+--------------+----------------------------+