TypeORM, как реализовать отношение один к двум (конкретный случай c) - PullRequest
0 голосов
/ 19 марта 2020

Я знаю, что это не обычная проблема, но я не могу обернуться вокруг одной проблемы c части моих отношений с сущностями. Problemati c часть образа ERD

Проблема:
У меня есть две сущности: Doors и Devices (камеры). Devices бывают двух типов: in и out. Для каждого Door у меня есть 2 Devices, по одному на каждый тип.
Итак, мои сущности теперь выглядят так:
Door.ts:

    @Type(() => Device)
    @OneToOne(() => Device, device => device.door)
    @JoinColumn({name: "device_in_id"})
    device_in: Device;


    @Type(() => Device)
    @OneToOne(() => Device, device => device.door)
    @JoinColumn({name: "device_out_id"})
    device_out: Device;

Device.ts:

    @Type(() => Door)
    @OneToOne(() => Door, door => ?????) // "door.device" is obviously not possible with present Door Entity and omitting reverse causes joinColumns error (it expects to find door.device_id or device.door_id). 
    door: Door;

Я хочу иметь возможность звонить door.device_in, door.device_out и device.door, чтобы избежать явной обработки ограничений (1 + 1 устройство на дверь). Я уже чувствую, что это не выполнимо, по крайней мере, не со стандартными опциями TypeORM.
Конечно, можно угробить device_in_id и device_out_id и создать door.id в Device, чтобы использовать OneToMany / ManyToOne, но это создаст много проблем с ограничениями.
Может ли быть хорошее типичное решение?

...