我有以下结构:
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'});
我可以使用用户为同一帖子创建多个评论。
但是如果我对同一个帖子的同一个用户有多个评论,并尝试通过以下方式选择它们:
Post.findAll({
include: [{model: models.User, as: 'postUserComment', attributes:['name'], through: {attributes: ['comment']}},
limit: 10,
offset: 0,
order: "id DESC"
...
它只是为帖子中的每个用户返回1条评论。我该怎样做才能全部选择它们?
方言:mysql, 续集版:~3.27.0
答案 0 :(得分:2)
在Sequelize中,与BelongsToMany
和相同ID有关联在某种程度上是棘手的。
正如您已经在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"
..
这不会改变您的数据库结构,并且会产生您想要的效果。