sequelize/sequelize-typescript - findAll 和 HasMany 返回一个对象而不是数组 [英] sequelize/sequelize-typescript - findAll with HasMany returns an object instead of an array
问题描述
我正在尝试使用 sequelize-typescript 建立一对多关系.但是当我尝试获取数据时,许多关系返回一个对象而不是数组
我有两张桌子.团队和球员.
团队可以有很多人,一个人属于一个团队.
我的模型:
@Table导出类 Team extends Model{@柱子名称:字符串@HasMany(() => Player)球员:球员[]}@桌子导出类 Player 扩展了 Model{@柱子名称:字符串@柱子数量:数量@ForeignKey(() => 团队)@柱子teamId:编号@BelongsTo(() => 团队)团队:团队}
当我跑步时:
Team.findAll({ include: [Player] })
我明白了:
<预><代码>[{身份证":1,"name": "我的团队","createdAt": "2020-06-17T14:23:03.000Z","updatedAt": "2020-06-17T14:23:03.000Z",玩家":{身份证":1,"name": "玩家一号",数量":10,团队ID":1,"createdAt": "2020-06-17T14:23:03.000Z","updatedAt": "2020-06-17T14:23:03.000Z"}},{身份证":1,"name": "我的团队","createdAt": "2020-06-17T14:23:03.000Z","updatedAt": "2020-06-17T14:23:03.000Z",玩家":{身份证":2,"name": "玩家二",数量":99,"teamId": 1,"createdAt": "2020-06-17T14:23:03.000Z","updatedAt": "2020-06-17T14:23:03.000Z"}}]但我需要得到这个:
<预><代码>[{身份证":1,"name": "我的团队","createdAt": "2020-06-17T14:23:03.000Z","updatedAt": "2020-06-17T14:23:03.000Z",玩家":[{身份证":1,"name": "玩家一号",数量":10,"teamId": 1,"createdAt": "2020-06-17T14:23:03.000Z","updatedAt": "2020-06-17T14:23:03.000Z"},{身份证":2,"name": "玩家二",数量":99,团队ID":1,"createdAt": "2020-06-17T14:23:03.000Z","updatedAt": "2020-06-17T14:23:03.000Z"}]}]我不知道是我做错了什么,或者是 sequelize-typescript 的问题,还是 sequelize 的问题.
有人可以帮我吗?
如果您在查询选项中指定:raw: true
,就会发生这种情况.
Team.findAll({包括: [播放器],raw: true//<-- 问题})
结果:
<预><代码>[{身份证":1,"name": "Team 1",players.id":1,"players.name": "玩家 1","players.num": 1,players.teamId":1},{身份证":1,"name": "Team 1",players.id":2,"players.name": "玩家 2","players.num": 2,players.teamId":1}]删除它:
Team.findAll({包括: [播放器]})
结果:
<预><代码>[{身份证":1,"name":"Team 1",玩家":[{身份证":1,"name":"玩家 1",数量":1,团队 ID":1},{身份证":2,"name":"玩家 2",数量":2,团队 ID":1}]}]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.
My models:
@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
}
When I run:
Team.findAll({ include: [Player] })
I get this:
[
{
"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"
}
}
]
but I need get this:
[
{
"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"
}
]
}
]
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.
can anybody help me?
This will happen if you specify: raw: true
in the query options.
Team.findAll({
include: [
Player
],
raw: true // <-- problem
}
)
Results 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
}
]
Removing it:
Team.findAll({
include: [
Player
]
}
)
Results 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
}
]
}
]
这篇关于sequelize/sequelize-typescript - findAll 和 HasMany 返回一个对象而不是数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!