• 反向关系

    反向关系

    关系可以是单向的或双向的。目前 PhotoMetadata 和 Photo 之间的关系是单向的。关系的所有者是 PhotoMetadata,而 Photo 对 PhotoMetadata 一无所知。这使得从 Photo 中访问 PhotoMetadata 变得很复杂。要解决这个问题,我们应该在 PhotoMetadata 和 Photo 之间建立双向关系。让我们来修改一下实体:

    1. import { Entity, Column, PrimaryGeneratedColumn, OneToOne, JoinColumn } from "typeorm";
    2. import { Photo } from "./Photo";
    3. @Entity()
    4. export class PhotoMetadata {
    5. /* ... other columns */
    6. @OneToOne(type => Photo, photo => photo.metadata)
    7. @JoinColumn()
    8. photo: Photo;
    9. }
    1. import { Entity, Column, PrimaryGeneratedColumn, OneToOne } from "typeorm";
    2. import { PhotoMetadata } from "./PhotoMetadata";
    3. @Entity()
    4. export class Photo {
    5. /* ... other columns */
    6. @OneToOne(type => PhotoMetadata, photoMetadata => photoMetadata.photo)
    7. metadata: PhotoMetadata;
    8. }

    photo => photo.metadata是用来指定反向关系的名称。Photo 类的元数据属性是在 Photo 类中存储 PhotoMetadata 的地方。你可以选择简单地将字符串传递给@OneToOne装饰器,而不是传递返回 photo 属性的函数,例如"metadata"。这种函数类型的方法使我们的重构更容易。

    注意,我们应该仅在关系的一侧使用@JoinColumn装饰器。你把这个装饰者放在哪一方将是这段关系的拥有方。关系的拥有方包含数据库中具有外键的列。