TypeORM-获取具有提供的ID的对象,这是一种关系

时间:2020-09-03 17:20:03

标签: api nestjs typeorm

我想从提供id的表中获取对象,该id与另一个关系的table有关。看起来像这样:

手与具有动作的多对一关系(手只能有一个动作), 动作与“情境”相关联(动作只能有一个情境)

我正在尝试对要提供情境编号的手进行GET请求。

简化的实体:

@Entity()
export class Hand {
  @PrimaryGeneratedColumn()
  hand_id: number;

  @Column()
  hand: string;

  @ManyToOne(type => Action, action => action.simplifiedhands, { eager: true, onDelete: 'CASCADE', onUpdate: 'CASCADE' })
  action: Action;
}


@Entity()
export class Action {
    @PrimaryColumn()
    action_id: number;

    @ManyToOne(type => Situation, situation => situation.actions, { onDelete: 'CASCADE', onUpdate: 'CASCADE' })
    @JoinColumn({name: 'situation'})
    situation: Situation;

    @OneToMany(type => Hand, hand => hand.action)
    hands: Hand[];

    @OneToMany(type => Hand, hand => hand.action)
    hands: Hand[];
}


@Entity()
export class Situation {
  @PrimaryColumn()
  situation_id: number;

  @ManyToOne(type => Strategy, strategy => strategy.situations, { onDelete: 'CASCADE', onUpdate: 'CASCADE' })
  strategy: Strategy;

  @OneToMany(type => Action, action => action.situation)
  actions: Action[];
}

到目前为止,什么方法对我不起作用(只是示例变体):

return await this.handsRepository.find({
      relations: ["action", "action.situation"],
      where: {
        "situation": id
      }
    });

return await this.handsRepository.find({
      join: {
        alias: "hands",
        leftJoinAndSelect: {
          "action": "hand.action",
          "situation": "action.situation"
        }
      },
      where: {
        "situation": id
      }
    });

通常都是“工作”,但会提供所有记录,就像没有条件一样。

1 个答案:

答案 0 :(得分:0)

在您的情况下,where中分配给Hand的对象中的键应该是存储库实体的成员,因为situation是操作的成员,因此无效。我很惊讶您没有提到任何错误。

您可以执行以下操作之一(例如postgres)

使用查询生成器:

return await this.handsRepository.createQueryBuilder(Hand, 'hand')
            .leftJoin('hand.action', 'action')
            .leftJoin('action.situation', 'situation')
            .where('situation.id = :id', { id })
            .getMany();

或者,您可以尝试以下操作(不保证成功):

return await this.handsRepository.find({
      relations: ["action", "action.situation"],
      where: {
        action: {
            situation: { id }
        }
      }
    });