sequelizejs渴望得到很多很多

时间:2017-04-01 12:20:36

标签: mysql node.js sequelize.js

我正在尝试使用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是故意省略的。

1 个答案:

答案 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模型没有这样的字段。