我正在尝试使用以下使用sequelize的代码从具有一对多关系的两个表中查询记录。 在这种情况下,一个作者可以拥有很多本书,而一本书只能由一位作者创作。
const BookList = await Book.findAll({
include: [
{
model: Author,
attributes: ['name'],
},
],
raw: true,
});
图书模型
const Books = sequelize.define(
'books',
{
id: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true,
},
name: {
type: DataTypes.STRING(255),
allowNull: false,
},
author_id: {
type: DataTypes.INTEGER(11),
allowNull: false,
references: {
model: 'authors',
key: 'id',
},
},
},
{
tableName: 'books',
},
);
作者模型
const Authors = sequelize.define(
'authors',
{
id: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true,
},
name: {
type: DataTypes.STRING(255),
allowNull: false,
},
},
{
tableName: 'authors',
},
);
预期结果如下。
[
{
id: 1,
name: "book1",
author_id: 1,
author: {
name: "tom",
}
},
.....
]
但是我得到的结果如下。
[
{
id: 1,
name: "book1",
author_id: 1,
"author.name": "tom"
},
.....
]
我的问题是,为什么我要获取“ author.name”而不是续集文档中许多示例中所示的author对象。
答案 0 :(得分:1)
因此,当您使用raw: true
时,您会收到无格式的brut数据,并且该数据不会绑定到任何模型定义。
如果要序列化格式不同的对象(在后台使用dottie.js),则可以使用属性nest: true
const BookList = await Book.findAll({
include: [
{
model: Author,
attributes: ['name'],
},
],
raw: true,
nest: true
});
这里是文档的链接:http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html