【问题标题】:TypeORM OneToMany creates columnTypeORM OneToMany 创建列
【发布时间】:2021-05-20 07:49:56
【问题描述】:

我有三个表和实体:

  • 客户
  • 购物
  • shop_customer

它们之间的关系是:

客户:

@OneToMany((type) => ShopCustomer, (shopCustomer) => shopCustomer.customer, { eager: false })
shopCustomer: ShopCustomer[];

商店:

@OneToMany((type) => ShopCustomer, (shopCustomer) => shopCustomer.shop, { eager: false })
shopCustomer: ShopCustomer[];

商店客户:

  @ManyToOne((type) => Customer, (customer) => customer.shopCustomer, { eager: false })
  customer: Customer;

  @ManyToOne((type) => Shop, (shop) => shop.shopCustomer, { eager: false })
  shop: Shop;

所以问题是,当我创建迁移并运行它们时,我得到了 shop_customer 表的正确结构,所以:

id、customerId、shopId、角色

(角色只是一个字符串)

问题在于商店和客户表。在这些中,我创建了 shopCustomerId 列。你知道我应该怎么做才能让它工作吗?

感谢您的帮助

【问题讨论】:

  • 您正在尝试创建包含来自其他两个表的外键的多对多关系表?如果是,那么您应该检查typeorm.io/#/many-to-many-relations 这个。我建立了帖子和标签关系,效果很好。
  • @Solvenc1no 如果我不需要自定义字段(角色),它会起作用。

标签: javascript typescript nestjs typeorm


【解决方案1】:

存在缓存问题。在 ORM 配置文件中禁用缓存并重新进行迁移解决了该问题。

【讨论】:

    【解决方案2】:

    因为您在 Shop 和 Customer 上定义了 @OneToMany 关系,所以 TypeOrm 为 ShopCustomer 创建了一个外键列。

    TypeOrm 多对一文档特别指出“如果您只关心 @ManyToOne 关系,则可以在相关实体上不使用 @OneToMany 的情况下定义它。”

    只需删除 Shop 和 Customer 上的 @OneToMany 关系。

    【讨论】:

      【解决方案3】:

      关系没问题,也许你之前做了错误的关系,尝试擦除根目录下的 de dist 文件夹以擦除实体缓存。 如前所述,@OneToMany 是需要注意的,但假设它们也不会创建任何字段。

      也许另一个解决方案正在执行此代码

      @OneToMany((type) => ShopCustomer)
      shopCustomer: ShopCustomer[];
      

      @ManyToOne 中的反比关系不是必须的,渴望默认为假。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-01
        • 1970-01-01
        • 2021-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多