我正在尝试使用Sequelizejs v3获取Nodejs中的连接表。
因此,1个Tag可以属于Many Images,而Many Images可以有多个Tag。
标签1 - > M ImageTag M< - 1张图片
当我尝试执行查询时,我收到Unhandled rejection Error: Tag is not associated to ImageDetails
。
function getImagesFromAlbum(albumid, callback, errCallback){
ImageDetails.findAll({where: { AlbumId: albumid }, include: [{model: Tag}]}).then((data) => {
return callback(data)
}).catch((err) => {
return errCallback(err)
})
}
预期的返回结果应该是根据albumid的数据,以及该图像的assiociate标签
以下是加入的关系
ImageDetails.belongsToMany(Tag, { as: { singular: "tag", plural: "tags" }, through: { model: ImageTag, unique: false }, foreignKey: "ImageId"})
Tag.belongsToMany(ImageDetails, { as: { singular: "image", plural: "images" }, through: { model: ImageTag, unique: false }, foreignKey: "TagId"})
以下是模型设计
标记模型
const model = {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
},
name: {
type: Sequelize.STRING
}
}
const name = "Tag"
ImageTag模型(加入表)
const model = {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
}
}
const name = "ImageTag"
ImageDetails模型
import { Sequelize, db } from "../config/MySqlConfiguration"
const model = {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
},
ImageLocation: {
type: Sequelize.STRING
},
originalName: {
type: Sequelize.STRING
}
}
const name = "ImageDetails"
*注意sequelize.define是故意省略的。
答案 0 :(得分:0)
在as
中使用别名(belongsToMany
)定义模型之间的关系时,您需要记住在急切加载模型时包含此别名,因此您的查询将如下所示
ImageDetails.findAll({
where: { AlbumId: albumid },
include: [{ model: Tag, as: 'tags' }]
}).then((data) => {
return callback(data)
}).catch((err) => {
return errCallback(err)
});
您想要执行查询的AlbumId
是什么?根据您的模型定义,ImageDetails
模型没有这样的字段。