我有两个模型,Post 和 PostLikes,其中 PostLikes.postId 引用 Post.id。我正在尝试运行 Post.findAll({}) 其中 PostLike.postId = Post.id。我尝试了很多很多东西,但一直无法到达任何地方。这是我上次尝试的,它显示了来自 Post 的所有信息,但 LikeCount 为 0。
await Post.findAll({
attributes: [
"id",
"username",
"title",
"body",
"createdAt",
"updatedAt",
[sequelize.fn("COUNT", sequelize.col("PostLikes.postId")), "LikeCount"]
],
include: [
{
model: PostLike,
attributes: []
}
],
group: ["Post.id"]
})
编辑:根据要求,这是我的模型定义。
邮政:
module.exports = (sequelize, DataTypes) => {
const Post = sequelize.define(
"Post",
{
title: DataTypes.STRING,
body: DataTypes.TEXT,
userId: DataTypes.INTEGER,
username: DataTypes.STRING
},
{}
);
Post.associate = function(models) {
Post.belongsTo(models.User, {
foreignKey: "username",
onDelete: "cascade"
});
Post.belongsTo(models.User, {
foreignKey: "userId",
onDelete: "cascade"
});
Post.hasMany(models.Comment, { foreignKey: "id" });
Post.hasMany(models.PostLike, { foreignKey: "id" });
};
return Post;
};
帖子喜欢:
module.exports = (sequelize, DataTypes) => {
const PostLike = sequelize.define(
"PostLike",
{
liked: DataTypes.BOOLEAN,
userId: DataTypes.INTEGER,
postId: DataTypes.INTEGER
},
{}
);
PostLike.associate = function(models) {
PostLike.belongsTo(models.Post, {
foreignKey: "postId",
onDelete: "cascade"
});
PostLike.belongsTo(models.User, {
foreignKey: "userId",
onDelete: "cascade"
});
};
return PostLike;
};
最佳答案
所以这个设置似乎有问题,我从来没有这样设置我的关联( Sequelize 非常困惑,文档似乎与他们的例子不一致),所以很难说。但是我玩过你的模型,当我尝试添加多个 PostLike 时,我遇到了一些约束错误。我对其进行了一些更改,并使其正常工作(我删除了用户引用,因为它们与此处的问题无关):
module.exports = (sequelize, DataTypes) => {
const Post = sequelize.define(
"Post",
{
title: DataTypes.STRING,
body: DataTypes.TEXT,
userId: DataTypes.INTEGER,
username: DataTypes.STRING
},
{}
);
Post.associate = function (models) {
Post.hasMany(models.PostLike);
};
return Post;
};
module.exports = (sequelize, DataTypes) => {
const PostLike = sequelize.define(
"PostLike",
{
liked: DataTypes.BOOLEAN,
userId: DataTypes.INTEGER,
},
{}
);
PostLike.associate = function(models) {//
PostLike.belongsTo(models.Post);
};
return PostLike;
};
插入一个帖子和两个 postLike 后,结果如下:
关于javascript - Sequelize Join 与匹配 id 的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61017135/