TypeORM:针对不同实体类型的多对一关系

问题描述 投票:0回答:1

我正在尝试在 TypeORM 中模拟以下情况:

[ItemContainer]-(0..1)---(0..n)-[ContainableItem]-(0..n)---(0..1)-[ItemLocation]

或者用文字来说:A

ContainableItem
可以位于
ItemContainer
中或位于
ItemLocation
处。实际上,它不可能同时出现在两者中,但这对于当前的问题并不重要。另外,我想指出,
ItemContainer
ItemLocation
之间没有重叠,它们是完全不同的实体。

我尝试通过在

one-to-many
ItemContainer
上放置
ItemLocation
并指向
ContainableItem
来模拟这种情况。

但从

many-to-one
的角度来建模
ContainableItem
关系时遇到困难。我如何告诉 TypeORM
ContainableItem.parent
指向
ItemContainer
ItemLocation

ContainableItem 架构(片段)

{
  ...
  relations: {
    parent: {
      type: 'many-to-one',
      target: ItemContainer.name || ItemLocation.name,
      inverseSide: nameof<ItemContainer |ItemLocation >((cl) => cl.items),
    },
  },
  ...
}
typescript sqlite typeorm
1个回答
1
投票

据我了解,您必须创建 2 列,对于 ItemContainer 和 ItemLocation 都可以为空。然后,如果项目在位置可用,您可以放置位置 ID 并将项目容器保留为空,或者如果项目在项目容器中,则您可以将容器 ID 放置在那里,并将项目位置保留为空。我想这就是你想要的。

© www.soinside.com 2019 - 2024. All rights reserved.