【问题标题】:sequelize/sequelize-typescript - findAll with HasMany returns an object instead of an arraysequelize/sequelize-typescript - 带有 HasMany 的 findAll 返回一个对象而不是数组
【发布时间】:2020-10-07 10:11:52
【问题描述】:

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

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

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

我的模型:

@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的问题。

谁能帮帮我?

【问题讨论】:

    标签: node.js typescript sequelize.js sequelize-typescript


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢,这就是问题所在。我使用raw: truenest: true 作为beforeFind 的钩子。我不知道这些选项导致了这个问题。
    猜你喜欢
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 2020-06-29
    • 2020-04-08
    • 2017-04-24
    • 2019-11-17
    • 1970-01-01
    相关资源
    最近更新 更多