Отношение TypeORM: только идентификаторы вместо целых экземпляров - PullRequest
0 голосов
/ 21 января 2020

Согласно документации , в TypeORM отношение определяется следующим образом: у пользователя ровно один профиль.

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: Profile ) вместо - как обычно - только одного удостоверения личности? Например:

@OneToOne(type => Profile)
    @JoinColumn()
    profileId: number;

Разве нет другого пути?

Эта процедура вызывает большие ненужные издержки, если вам нужно выполнить 4 запроса для 4 внешних ключей, чтобы получить соответствующий экземпляр вместо удостоверения личности.

Я был бы очень признателен за помощь, чтобы обойти это!

1 Ответ

1 голос
/ 21 января 2020

В TypeORM поле навигации (здесь profile) можно комбинировать с полем простого внешнего ключа (profileId). Таким образом, вы можете написать:

@Entity()
export class User {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

    @OneToOne(type => Profile)
    @JoinColumn()
    profile: Profile;

    @Column()
    profileId: number;

}

Тогда вам решать, обновите ли вы отношение с объектом-сущностью или только с идентификатором профиля.

...