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 |
+----+--------+--------+

【问题讨论】:

您需要一个与UsersPosts 相关的多对多表。这在 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 从 belongsTo 关系中获取值

Sequelize ORM中HasOne和BelongsTo的区别

Sequelize:检查并添加 BelongsToMany(N 到 N)关系

sequelize模型

Sequelize-test-helpers 和 calledWith AssertionError 未定义参数