gpt4 book ai didi

mysql - Sequelize 具有相同外键的多对多表只选择一个值

转载 作者:行者123 更新时间:2023-11-29 06:07:13 24 4
gpt4 key购买 nike

我有以下结构:

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, Sequelize 版本:~3.27.0

最佳答案

BelongsToMany 关联并且相同的 id 在 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"
..

这不会改变您的数据库结构,并且会产生您想要的效果。

关于mysql - Sequelize 具有相同外键的多对多表只选择一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40744928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com