【发布时间】:2021-07-13 08:11:14
【问题描述】:
我按照sequelize-typescript 文档将我的Model 连接到MySql 数据库,并使用findAll() 方法从数据库中获取数据。
但我从findAll() 方法的响应中得到了空字段
房间模型
@Table({
tableName: "room",
})
export class Room extends Model<Room> {
@PrimaryKey
@AutoIncrement
@Column
id: number = -1
@Column
roomName: string = ""
@BelongsToMany(() => User, () => PinUserRoom)
users: User[] = []
@HasMany(() => Message)
messages: Message[] = []
}
为了从数据库中获取数据,我使用了以下代码
Room.findAll({
include: [Message],
}).then((result) => {
console.log(JSON.stringify(result, null, 2));
})
这是日志信息
[
{
"roomName": "",
"id": 2,
"messages": []
},
{
"roomName": "",
"id": 3,
"messages": []
},
{
"roomName": "",
"id": 4,
"messages": []
},
{
"roomName": "",
"id": 5,
"messages": [
{
"id": 1,
"passage": "",
"roomId": -1
},
{
"id": 2,
"passage": "",
"roomId": -1
}
]
}
]
MySQL 数据库 - 房间表
当我在寻找答案时,我意识到当我在 findAll() 方法中使用 raw: true 时,一切正常,除了数组(查看此处以获取更多信息 sequelize/sequelize-typescript - findAll with HasMany returns an object instead of an array)
使用raw: true时的JSON
[
{
"id": 2,
"roomName": "pv",
"messages.id": null,
"messages.passage": null,
"messages.roomId": null
},
{
"id": 3,
"roomName": "group",
"messages.id": null,
"messages.passage": null,
"messages.roomId": null
},
{
"id": 4,
"roomName": "bot",
"messages.id": null,
"messages.passage": null,
"messages.roomId": null
},
{
"id": 5,
"roomName": "channel",
"messages.id": 1,
"messages.passage": "this is a message in channel -- 1",
"messages.roomId": 5
},
{
"id": 5,
"roomName": "channel",
"messages.id": 2,
"messages.passage": "this a 2nd message",
"messages.roomId": 5
}
]
为什么不通过raw: true时数据字段为空
【问题讨论】:
标签: mysql node.js typescript sequelize.js sequelize-typescript