Zoeken op website

node.js - sequelize/sequelize-typescript - findAll met HasMany retourneert een object in plaats van een array


Ik probeer een one-to-many relatie te maken met sequelize-typescript. Maar wanneer ik probeer de gegevens op te halen, geeft de relatie voor 'many' mij een object in plaats van een array terug

Ik heb twee tabellen. Team en Spelers.

Een team kan veel spelers hebben, en een speler behoort tot een team.

Mijn modellen:

@Table
export class Team extends Model<Team> {
  @Column
  name: string

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

@Table
export class Player extends Model<Player> {
  @Column
  name: string

  @Column
  num: number

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

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

Wanneer ik ren:

Team.findAll({ include: [Player] })

Ik krijg dit:

[
  {
    "id": 1,
    "name": "My Team",
    "createdAt": "2020-06-17T14:23:03.000Z",
    "updatedAt": "2020-06-17T14:23:03.000Z",
    "players": {
      "id": 1,
      "name": "Player One",
      "num": 10,
      "teamId": 1,
      "createdAt": "2020-06-17T14:23:03.000Z",
      "updatedAt": "2020-06-17T14:23:03.000Z"
    }
  },
  {
    "id": 1,
    "name": "My Team",
    "createdAt": "2020-06-17T14:23:03.000Z",
    "updatedAt": "2020-06-17T14:23:03.000Z",
    "players": {
      "id": 2,
      "name": "Player Two",
      "num": 99,
      "teamId": 1,
      "createdAt": "2020-06-17T14:23:03.000Z",
      "updatedAt": "2020-06-17T14:23:03.000Z"
    }
  }
]

maar ik moet dit krijgen:

[
  {
    "id": 1,
    "name": "My Team",
    "createdAt": "2020-06-17T14:23:03.000Z",
    "updatedAt": "2020-06-17T14:23:03.000Z",
    "players": [
      {
        "id": 1,
        "name": "Player One",
        "num": 10,
        "teamId": 1,
        "createdAt": "2020-06-17T14:23:03.000Z",
        "updatedAt": "2020-06-17T14:23:03.000Z"
      },
      {
        "id": 2,
        "name": "Player Two",
        "num": 99,
        "teamId": 1,
        "createdAt": "2020-06-17T14:23:03.000Z",
        "updatedAt": "2020-06-17T14:23:03.000Z"
      }
    ]
  }
]

Ik weet niet of ik iets verkeerd doe, of dat het een probleem is met sequelize-typescript, of dat het een probleem is met sequelize.

kan iemand mij helpen?

Antwoord #1

Dit gebeurt als je opgeeft: raw: true in de query-opties.

Team.findAll({
        include: [
            Player
        ],
        raw: true // <-- problem
    }
)

Resultaten in:

[
  {
    "id": 1,
    "name": "Team 1",
    "players.id": 1,
    "players.name": "Player 1",
    "players.num": 1,
    "players.teamId": 1
  },
  {
    "id": 1,
    "name": "Team 1",
    "players.id": 2,
    "players.name": "Player 2",
    "players.num": 2,
    "players.teamId": 1
  }
]

Het verwijderen:

Team.findAll({
        include: [
            Player
        ]
    }
)

Resultaten in:

[
   {
      "id":1,
      "name":"Team 1",
      "players":[
         {
            "id":1,
            "name":"Player 1",
            "num":1,
            "teamId":1
         },
         {
            "id":2,
            "name":"Player 2",
            "num":2,
            "teamId":1
         }
      ]
   }
]

Gerelateerde artikelen