sequelize-typescript icon indicating copy to clipboard operation
sequelize-typescript copied to clipboard

Relations are not working properly while using multiple entity. Datas are duplicated. is it expected behaviour?

Open GnanaprakashChandiran opened this issue 4 years ago • 2 comments

Issue

Relations are not working properly while using multiple entity. Datas are duplicated. is it expected behaviour?

Versions

  • sequelize:6.6.2
  • sequelize-typescript: 2.1.0
  • typescript:4.2.4

Issue type

  • [x] bug report

Actual behavior

After run the query, the output is like,

[ { teamId: 1, name: 'Player 1' }, { teamId: 1, name: 'Player 3' }, ] The team records are duplicated, instead of map data in players proprty.

Expected behavior

[{ teamId: 1, players: [ { teamId: 1, name: 'Player 1' }, { teamId: 2, name: 'Player 2' } ] }, ]

Steps to reproduce

I have Team and Player table. The main table is Team and each team have multiple players.

Team table records:

[ { teamId: 1, name: 'Team 1' }, { teamId: 2, name: 'Team 2' } ]

Player table records:

[ { teamId: 1, name: 'Player 1' }, { teamId: 2, name: 'Player 2' }, { teamId: 1, name: 'Player 3' }, { teamId: 2, name: 'Player 4' } ]

@Table
class Player extends Model {
  @Column
  name: string

  @Column
  num: number

  @ForeignKey(() => Team)
  @Column
  teamId: number

  @BelongsTo(() => Team)
  team: Team
}

@Table
class Team extends Model {
  @Column
  name: string

@Column
  teamId: number

  @HasMany(() => Player)
  players: Player[]
}
That's all, sequelize-typescript does everything else for you. So when retrieving a team by find

Team.findAll({ include: [Player], raw:true, nest: true }).then((team) => {
  console.log('-=-=team-=-=', team);
})

GnanaprakashChandiran avatar Nov 23 '21 11:11 GnanaprakashChandiran

try to remove frm class Team the @Column teamId: number because it is need to be id (primary key) wich is auto generated.

In example is like so https://github.com/RobinBuschmann/sequelize-typescript#model-association:

@Table
class Player extends Model {
  @Column
  name: string

  @Column
  num: number

  @ForeignKey(() => Team)
  @Column
  teamId: number

  @BelongsTo(() => Team)
  team: Team
}

@Table
class Team extends Model {
  @Column
  name: string

  @HasMany(() => Player)
  players: Player[]
}

n4an avatar Dec 06 '21 08:12 n4an

try to remove frm class Team the @column teamId: number because it is need to be id (primary key) wich is auto generated.

In example is like so https://github.com/RobinBuschmann/sequelize-typescript#model-association:

@Table
class Player extends Model {
  @Column
  name: string

  @Column
  num: number

  @ForeignKey(() => Team)
  @Column
  teamId: number

  @BelongsTo(() => Team)
  team: Team
}

@Table
class Team extends Model {
  @Column
  name: string

  @HasMany(() => Player)
  players: Player[]
}

Mitch, I got the response. But the response format is different from what I expected.

GnanaprakashChandiran avatar Dec 08 '21 15:12 GnanaprakashChandiran