我正在尝试在 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),
},
},
...
}
据我了解,您必须创建 2 列,对于 ItemContainer 和 ItemLocation 都可以为空。然后,如果项目在位置可用,您可以放置位置 ID 并将项目容器保留为空,或者如果项目在项目容器中,则您可以将容器 ID 放置在那里,并将项目位置保留为空。我想这就是你想要的。