2016-11-22 18 views
1

を選択していると私は、次の構造を持っている:Sequelize多対多のテーブルの同一の外部キーがただ一つの値

var User = sequelize.define('user', { 
    name: DataTypes.STRING 
}); 

var Post = sequelize.define('post', { 
    text: DataTypes.STRING 
}); 

var PostComment = sequelize.define('postComment ', { 
    id: { 
    type: DataTypes.BIGINT, 
    primaryKey: true, 
    autoIncrement: true 
    }, 
    comment: DataTypes.TEXT 
}); 

Post.belongsToMany(User, {as: 'postUserComment', through: {model: models.PostComment, unique: false}, foreignKey: 'idPost'}); 

User.belongsToMany(Post, {through: {model: models.PostComment, unique: false}, foreignKey: 'idUserComment'}); 

を私は、ユーザーと同じポストに倍数のコメントを作成することができています。

しかし、私は、同じユーザーと同じポストにもっとして1件のコメントを持っていることによって、それらを選択しようとした場合:

Post.findAll({ 
      include: [{model: models.User, as: 'postUserComment', attributes:['name'], through: {attributes: ['comment']}}, 
      limit: 10, 
      offset: 0, 
      order: "id DESC" 
... 

はそれだけで、ポスト内の各ユーザーのための1件のコメントを返します。それらをすべて選択するにはどうすればいいですか?

方言:mysqlの、 Sequelizeバージョン:〜BelongsToManyとの関連付けと同じIDを持つ3.27.0

答えて

2

はSequelizeで何とかトリッキーです。

すでにGitHub #6906に気づいているように、他の関連する問題を気付いたことがあるので、これを行う最も良い方法は、さまざまな関係でそれを軽減することです。

Post.hasMany(models.PostComment, { foreignKey: 'idPost' }); 

をしてから、クエリ

Post.findAll({ 
     include: [ 
     {model: models.User, as: 'postUserComment', attributes:['name'], through: {attributes: ['comment']}}, 
     {model : models.PostComment} 
     ], 
     limit: 10, 
     offset: 0, 
     order: "id DESC" 
     .. 

これにデータベースの構造を変更しないし、あなたが望む効果があります:

たとえば、あなたが追加することができます。

+0

私はそれをしようとすると、クエリを実行すると、エラーをスロー: "未処理の拒否TypeError:未定義のプロパティ 'getTableName'を読み取ることができません"。 しかし、それは新しいインスタンスを作成するために動作します –

+0

私の悪い、構文エラー、youtソリューションは私のために働いた。ありがとう –

関連する問題