sequelize/sequelize-typescript - 带有 HasMany 的 findAll 返回一个对象而不是数组 [英] sequelize/sequelize-typescript - findAll with HasMany returns an object instead of an array

查看:22
本文介绍了sequelize/sequelize-typescript - 带有 HasMany 的 findAll 返回一个对象而不是数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 sequelize-typescript 建立一对多的关系.但是当我尝试获取数据时,许多人的关系返回给我一个对象而不是一个数组

I'm trying to make a one-to-many relationship using sequelize-typescript. But when I try to get the data, the relationship for many, returns me an object instead of an array

我有两张桌子.球队和球员.

I have two tables. Team and Players.

团队可以有很多玩家,一个玩家属于一个团队.

Team can has many players, and a player belongs to a team.

我的模型:

@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
}

当我跑步时:

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

我明白了:

[
  {
    "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"
    }
  }
]

但我需要得到这个:

[
  {
    "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"
      }
    ]
  }
]

不知道是我做错了什么,还是sequelize-typescript的问题,还是sequelize的问题.

I don't know if I'm doing something wrong, or if it's a problem with sequelize-typescript, or if it's a problem with sequelize.

谁能帮帮我?

推荐答案

如果您在查询选项中指定:raw: true,就会发生这种情况.

This will happen if you specify: raw: true in the query options.

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

结果:

[
  {
    "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
  }
]

删除它:

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

结果:

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

这篇关于sequelize/sequelize-typescript - 带有 HasMany 的 findAll 返回一个对象而不是数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆