#sequelize.js
#sequelize.js
Вопрос:
Вот запрос в sequelize (6.3.5) с Artwork
присоединением модели Artimage
:
const { Artwork, validateArtwork} = require('../models/artwork');
const { Artimage, validateArtimage} = require('../models/artimage');
artworks = await Artwork.findAll({
where : {
id: {[Op.gt]:last_artwork_id},
},
include: [{
model:Artimage,
attributes:['width', 'height', ['name', 'img_name'], 'path', 'size_kb', ['label', 'img_label'], ['fileName', 'img_fileName']],
}],
attributes:{excludes:['fort_token']},
order:[['id', 'DESC']]
});
Здесь, когда last_artwork_id
равно 7, artwork#8
выбирается с его 2 изображениями artimage
. Однако artworks.length
1
вместо 2
. Но когда выполняется необработанный SQL-код, он возвращает 2 записи, для которых есть 2 изображения artwork#8
. Вот необработанный SQL из приведенного выше кода:
SELECT "artwork"."id", "artwork"."name", "artwork"."auther", "artwork"."category", "artwork"."wt_g", "artwork"."production_year", "artwork"."dimension",
"artwork"."uploader_id", "artwork"."description", "artwork"."note", "artwork"."tag", "artwork"."deleted", "artwork"."status", "artwork"."artwork_data",
"artwork"."last_updated_by_id", "artwork"."fort_token", "artwork"."createdAt", "artwork"."updatedAt", "artimages"."id" AS "artimages.id",
"artimages"."width" AS "artimages.width", "artimages"."height" AS "artimages.height", "artimages"."name" AS "artimages.img_name", "artimages"."path" AS "artimages.path",
"artimages"."size_kb" AS "artimages.size_kb", "artimages"."label" AS "artimages.img_label", "artimages"."fileName" AS "artimages.img_fileName" FROM
"artworks" AS "artwork" LEFT OUTER JOIN "artimages" AS "artimages" ON "artwork"."id" = "artimages"."artwork_id" WHERE "artwork"."id" > 7 ORDER BY "artwork"."id" DESC
Почему artworks.length
1 элемент sequelizejs
вместо 2 элементов (правильно)?
Ответ №1:
sequelizejs
возвращает объединенный artimage
в массив объект с ключом имени таблицы artimages
: artworks.artimages[0] amp; artworks.artimages[1]