Я пытаюсь запросить записи из двух таблиц, которые имеют отношения «один ко многим», используя следующий код, используя sequenceize. В этом случае у одного автора может быть много книг, а книга может быть написана только одним автором.
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» вместо объекта автора, как показано во многих примерах в документах сиквела.
Итак, когда вы используете raw: true
, вы получите данные брутто без какого-либо формата и не привязаны ни к какому определению модели.
Если вы хотите продолжить форматирование различных (используя 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