node.js - sequelize/sequelize-typescript - findAll 和 HasMany 返回一个对象而不是数组

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

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

我有两张 table 。团队和球员。

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

我的模型:

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

有谁能够帮助我?

最佳答案

如果您指定: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
         }
      ]
   }
]

关于node.js - sequelize/sequelize-typescript - findAll 和 HasMany 返回一个对象而不是数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62431589/

相关文章:

javascript - 在组件/页面之间传递对象

angular - RxJS 6+ 类型 'Observable' 必须有一个返回迭代器的 'Symbol.iterator' 方法

postgresql - 如何在 Sequelize 中创建这种关系

node.js - 如何在数据库中已定义表时使用 ORM?

node.js - 当Electron渲染器进程请求HTTPS API时,初始连接(SSL协商)太慢-为什么?

node.js - 关于 linux NPM 安装 pm2 和这样的错误

node.js - 由于 Node.js 和 Angular 运行在不同的本地主机上,如何在 Angular 中使用 Nodemailer 电子邮件验证的路由?

javascript - 如何使用同构 React 处理子组件?

angular - 显示/隐藏 - 单击按钮时的内容

javascript - 对象未定义但 console.log 显示一个对象