Sequelize:检查并添加 BelongsToMany(N 到 N)关系
Posted
技术标签:
【中文标题】Sequelize:检查并添加 BelongsToMany(N 到 N)关系【英文标题】:Sequelize: Check and add BelongsToMany (N to N) relation 【发布时间】:2018-09-03 00:57:19 【问题描述】:我的应用程序获得了许多用户,他们可以喜欢许多帖子(N 到 N)。这就是为什么我为我的模型分配了以下“belongsToMany”关系 (Sequelize Doc):
// Post Model
models.Post.belongsToMany(models.User, through: models.PostLikes);
// User Model
models.User.belongsToMany(models.Post, through: models.PostLikes);
在我的 Post Controller 中,我得到了“likePost”函数的以下用例:
-
检查帖子是否存在。 (似乎有效)
如果是,请检查用户是否已经喜欢此帖子。
如果不是,则分配 User 和 Post 之间的 N 到 N 关系。 (似乎工作)
// User likes Post
exports.likePost = async (req, res) =>
const postToLike = await Post.findById(req.body.postId);
// Check if the Post exists
if (!postToLike)
return res.status(404).json( error: message: 'Post not found.' );
// Did user already like the post?
// HERE IS THE NOT WORKING PART:
if (await req.user.hasPost(postToLike).isFulfilled())
return res.status(422).json( error: message: 'Already liked post.' );
// add Like
await req.user.addPost(postToLike);
return res.send(postToLike);
;
现在我遇到了问题,我无法检查用户是否已经喜欢某个帖子。 “req.user.hasPost(postToLike).isFulfilled()”总是返回 false,即使我确实可以在我的“PostLikes”数据库表中看到正确的关系。那么我该如何正确:
-
检查用户是否已经喜欢帖子。
分配此关系。
并删除与 Sequelize 的关系?
顺便说一句,这就是我的 PostLikes 表的样子:
+----+--------+--------+
| id | userId | postId |
+----+--------+--------+
| 1 | 2 | 3 |
+----+--------+--------+
【问题讨论】:
您需要一个与Users
和Posts
相关的多对多表。这在 mysql 中很容易做到;我不知道如何说服你正在使用的抽象包来做到这一点。
【参考方案1】:
查看文档,没有提到 isFulfilled()。
您是否尝试过 req.user.hasPost(postToLike)
?
(Sequelize Doc)
【讨论】:
我登录req.user.hasPost(postToLike)
并注意到“isFulfilled()”是未决承诺的结果。所以我把这部分改成await req.user.hasPost(postToLike)
。基本上这解决了整个问题,因为它现在返回了预期的结果。
isFullfilled() 一般不直接访问。 await 期待一个承诺,并且通过调用 isFullfilled(),它没有得到等待的承诺。如果解决了问题,您能否接受答案,谢谢:)
嗨,我知道它已经有一段时间了,但是为什么它是多对多关系,因为一个用户可以有很多帖子,但一个帖子属于一个用户?以上是关于Sequelize:检查并添加 BelongsToMany(N 到 N)关系的主要内容,如果未能解决你的问题,请参考以下文章
Apollo,Sequelize - 简单的 `belongsTo` 关联返回 null
Sequelize ORM中HasOne和BelongsTo的区别