2017-04-01 49 views
0

我想獲取與Sequelizejs v3的Nodejs連接表上渴望。sequelizejs渴望獲取許多到很多

所以,1個標籤可以屬於許多圖像,並且許多圖像可以有多個標籤。

標籤1 - > MS ImageTag中號< - 1圖片

我得到Unhandled rejection Error: Tag is not associated to ImageDetails當我試圖EXCUTE查詢。

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

belongsToMany定義與使用別名(as)的模型之間的關係,你需要記住包括此別名時預先加載的車型,所以您的查詢將如下所示

ImageDetails.findAll({ 
    where: { AlbumId: albumid }, 
    include: [{ model: Tag, as: 'tags' }] 
}).then((data) => { 
    return callback(data) 
}).catch((err) => { 
    return errCallback(err) 
}); 

什麼是你想要執行查詢的​​?根據你的模型定義,ImageDetails模型沒有這樣的領域。