2017-04-01 19 views
0

Sequelizejs v3でNodejsの結合テーブルでeagerを取得しようとしています。sequelizejs eager many to many

したがって、1つのタグは複数の画像に属し、多くの画像には複数のタグを付けることができます。

タグ1 - > M ImageTag M <から1画像

私は、クエリをexcuteしようとしたとき、私は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) 
    }) 
} 

期待リターン結果はその画像の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"}) 

モデル設計

ある接合関係であり、ALBUMIDに係るデータであるべきです

タグモデル

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モデルにはこのようなフィールドはありません。