Byeongin Yoon
Byeongin Yoon

Reputation: 4037

TypeORM leftjoin with same column name

Environment

  1. TypeORM
  2. Typescript
  3. Express
  4. MySQL 5.7

'TeamSpeed' Table in MySQL DataBase

team go right left
1 40 60 120
2 50 40 70
3 35 10 80
4 70 15 97

'TeamWords' Table in MySQL DataBase

team go right left
1 "go1" "ok right" "left1"
2 "lets go" "right2" "left2"
3 "here we go" "right3" "left100"
4 "move" "right4" "OK LEFT"

TypeORM Entities

@Entity('team_speeds')
class Speeds extends BaseEntity {
  @PrimaryGeneratedColumn()
  team: number

  @Column()
  go: number

  @Column()
  right: number

  @Column()
  left: number
}


@Entity('team_words')
class Words extends BaseEntity {
  @PrimaryGeneratedColumn()
  team: number

  @Column()
  go: string

  @Column()
  right: string

  @Column()
  left: string
}

Problem

I know that how to join two table in MySQL Query.

But, I don't know how to join two table in TypeORM.

How to join two table based on team column ?

Upvotes: 1

Views: 1211

Answers (1)

Eranga Heshan
Eranga Heshan

Reputation: 5804

You need to update the entity classes like below:

@Entity('team_speeds')
class Speeds extends BaseEntity {
  @PrimaryGeneratedColumn()
  team: number

  @Column()
  go: number

  @Column()
  right: number

  @Column()
  left: number

  @OneToOne(() => Words, words => words.Speeds)
  words: Words;
}


@Entity('team_words')
class Words extends BaseEntity {
  @PrimaryGeneratedColumn()
  team: number

  @Column()
  go: string

  @Column()
  right: string

  @Column()
  left: string

  @OneToOne(() => Speeds, speeds => speeds.words)
  @JoinColumn({ name: 'team' })
  speeds: Speeds;
}

Then when you want to query data, you can use one from below.

1. Using find:

async foo(teamSpeedId: number) {
  const speeds = await getManager().getRepository(Speeds).find({
    relations: ['words'],
    where: { team: teamSpeedId },
  });
}

2. Using QueryBuilder:

async foo(teamSpeedId: number) {
  const speeds = await connection
    .getRepository(Speeds)
    .createQueryBuilder("speed")
    .leftJoinAndSelect("speed.words", "word")
    .where('team = :id', {id: teamSpeedId})
    .getMany();
}

Check this documentation for more info.

Upvotes: 1

Related Questions