【问题标题】:TypeORM relation only gives back idsTypeORM 关系只返回 id
【发布时间】:2021-08-09 04:18:06
【问题描述】:

我是 TypeORM 的新手,所以这可能是一个简单的问题,但我已经创建了两个具有 OneToMany 和 ManyToOne 关系的实体,如下所示:

@Entity('user')
export class UserEntity {
  // I left out other fields
  @OneToMany(
    () => ConfigurationEntity,
    (configuration) => configuration.createdBy,
    { nullable: true, cascade: true, eager: true },
  )
  createdConfigurations?: ConfigurationEntity[];
}
@Entity('configurations')
export class ConfigurationEntity {
  @ManyToOne(() => UserEntity, (user) => user.createdConfigurations)
  createdBy: UserEntity;
}

当我创建配置时,我通过将 ConfigurationEntity 添加到 UserEntity 来保存它,然后像这样保存 UserEntity:

async createConfiguration(configurationDto: ConfigurationDto, userEntity: UserEntity) {
    let configurationEntity = new ConfigurationEntity();
    configurationEntity.createdBy = userEntity;

    // here I set some other values of my configurationEntity which I left out
    // ....

    if (!userEntity.createdConfigurations) {
      userEntity.createdConfigurations = [];
    }
    userEntity.createdConfigurations.push(configurationEntity);
    await this.userRepository.save(userEntity);

    configurationEntity.createdBy = undefined;
    return configurationEntity;
  }

一切看起来都很好,当我保存它时,它实际上保存得很好。 我遇到的问题是,当我尝试查找用户并查看 createdConfigurations 时,我只有一个配置 ID 的列表。我想查看完整的 ConfigurationEntity(由于循环引用而没有 createdBy)。我怎样才能做到这一点?

实际:

{
  id: 1,
  createdConfigurations: [ { id: 3 }, { id: 4 } ]
}

预期:

{
  id: 1,
  createdConfigurations: [ { id: 3, brand: 'Mercedes', ... }, { id: 4, brand: 'Kia', ... } ]
}

【问题讨论】:

标签: javascript typescript orm nestjs typeorm


【解决方案1】:

我发现了问题所在。这与急切的选择有关。 我的配置实体如下所示:

@Entity('configurations')
export class ConfigurationEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @OneToOne(() => ConfigurationBasicInfoEntity, { cascade: true })
  @JoinColumn()
  basicInfo: ConfigurationBasicInfoEntity;

  @OneToOne(() => ConfigurationColorUpholsteryEntity, {
    cascade: true,
  })
  @JoinColumn()
  colorUpholsteryInfo: ConfigurationColorUpholsteryEntity;

  @OneToOne(() => ConfigurationFinanceEntity, { cascade: true })
  @JoinColumn()
  financeInfo: ConfigurationFinanceEntity;

  @OneToOne(() => ConfigurationContactEntity, { cascade: true })
  @JoinColumn()
  contactInfo: ConfigurationContactEntity;

  @ManyToOne(() => UserEntity, (user) => user.createdConfigurations)
  createdBy: UserEntity;
}

我必须在我的实体的选项中添加 eager: true 才能像这样加载它们:

@Entity('configurations')
export class ConfigurationEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @OneToOne(() => ConfigurationBasicInfoEntity, { cascade: true, eager: true })
  @JoinColumn()
  basicInfo: ConfigurationBasicInfoEntity;

  @OneToOne(() => ConfigurationColorUpholsteryEntity, {
    cascade: true,
    eager: true,
  })
  @JoinColumn()
  colorUpholsteryInfo: ConfigurationColorUpholsteryEntity;

  @OneToOne(() => ConfigurationFinanceEntity, { cascade: true, eager: true })
  @JoinColumn()
  financeInfo: ConfigurationFinanceEntity;

  @OneToOne(() => ConfigurationContactEntity, { cascade: true, eager: true })
  @JoinColumn()
  contactInfo: ConfigurationContactEntity;

  @ManyToOne(() => UserEntity, (user) => user.createdConfigurations)
  createdBy: UserEntity;
}

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 2022-01-22
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 2019-05-08
    相关资源
    最近更新 更多