在没有联结表的情况下查询多对多关系

时间:2021-02-24 20:32:23

标签: postgresql nestjs typeorm typeorm-datamapper

我的应用程序中有三个实体,如下所示:

class Machine{
    id
    site_id 
    contract_id
    client_id
}

class Site{
    id 
}

class Contract{
    id
}

有一个名为 Machine 的实体,它与 one_to_manyContract 关系,另一个与另一个名为 one_to_many 的实体有 Site 关系。 SiteContracts 之间没有直接关系,它们之间不存在联结表,但 MachineSiteContract 以及 {{1} } 在这些实体之间很常见,并且在 99% 的情况下都能正常工作。

现在业务要求新的东西,它需要用户的合同列表,每个合同都应该有站点列表,站点有机器列表。拥有原始 SQL 查询或可以应用于 client_id 查询构建器的解决方案会很棒。我应该提一下,在 TypeOrmSite 之间建立多对多关系并不是我想要的,因为它给我的案例带来了一些复杂性。

1 个答案:

答案 0 :(得分:0)

机器可以用作中间的连接台 所以在代码中我们可能会定义一个像下面这样的关系

class site{
id
@ManyToMany(type=>Contract,contract=>contract.sites)
contracts:Contract[]
}

class Contract{
id
@ManyToMany(type=>Site,site=>site.contracts)
@JoinTable({name:"machine"})
sites:Site[] 
}
相关问题