2017-05-04 65 views
0

'include'でsequelizeを使用すると少し問題があります。 問題は、私のモデルが子テーブルの2つの主キーを使用していることです。同上、...
ポスト:ID、ユーザーID(外部キーは、ユーザIDに結合する)、... ポストハッシュタグ:ハッシュタグ、PostId(外国Sequelizeは複数の条件でインクルードします

は、だから、この 親テーブルのような ユーザーを行きます私がしようとすると、ポストハッシュタグ今

- ポスト - キー、)IDを投稿する結合し、ユーザーID(外部キーは、ポストテーブルのユーザIDに結合する)

だから表階層は、この ユーザーのように見えますこのように、

Post.findAll(
include: { 
model: post hash tag 
} 
) 

ポストハッシュタグテーブルのポストIDはポストテーブル

のIDをポストに等しいだから私は、それは問題を与えます。この

Post.findAll(
include: { 
model: post hash tag 
where: { 
col1: models.sequelize.where(models.sequelize.col('POST.USER_ID'), '=', models.sequelize.col('POST_HASH_TAG.USER_ID')) 
} 
} 
) 

のような追加のために、それが唯一のポストのハッシュタグを検索Post.USER_IDが見つからない 'where'節。

私はその後、Post.userIdにcol1の値を変更した場合、今、それは上記のエラーを解決しますが

「オン」に別のエラーを与えるあなたは、私はこの問題を解決することができますどのように任意のアイデアを持っていますか?

フルモデルが

ユーザsequelize.defineここで与えられている( 'ユーザ'、{ ID:{タイプ:DataTypes.STRING(6)、フィールド: 'ID'、主キー:真} )

ポスト - 私は、複数の主要な宣言が正しく動作していない知っているので、

sequelize.define('Post', { 
    id: { type: DataTypes.STRING(6), field: 'ID', primaryKey: true }, 
    userId: { type: DataTypes.STRING(6), field: 'USER_ID', primaryKey: true } 
) 

ポストハッシュタグ

あまりを検討する気にしないでください
sequelize.define('PostHashTag', { 
    postId: { type: DataTypes.STRING(6), field: 'POST_ID', primaryKey: true }, 
    hashTag: { type: DataTypes.STRING(20), field: 'HASH_TAG', primaryKey: true }, 
    userId: { type: DataTypes.STRING(6), field: 'USER_ID', primaryKey: true } 
    } 
) 

と私が使用したクエリが

Post.findAll({ 
     attributes: ['id', 'userId'], 
     where: { 
     userId: userId, 
     id: { $lt: postId } 
     }, 
     include: [{ 
     model: models.PostHashTag, 
     attributes: ['hashTag'], 
     where: { 
      col1: models.sequelize.where(models.sequelize.col('Post.USER_ID'), '=', models.sequelize.col('PostHashTag.userId')) 
}]).then(...) 
+0

私は自分で答えを見つけました... col1:models.sequelize.where(models.sequelize.col( 'Post.USER_ID')、 '='、models。 ( 'PostHashTag.USER_ID') これは有効です。括弧で囲まれた表と列の物理名 –

答えて

0

は私が自分で答えを見つけたです... COL1は:

models.sequelize.where(models.sequelize.col('Post.USER_ID'), '=', models.sequelize.col('PostHashTag.userId')) 

これは、これは動作します

userId: models.sequelize.where(models.sequelize.col('POST.userId'), '=', models.sequelize.col('POST_HASH_TAG.USER_ID')) 

でなければなりません。括弧内に使用されているテーブルとカラムの物理名