【问题标题】:Sequelize: Check and add BelongsToMany (N to N) relationSequelize:检查并添加 BelongsToMany(N 到 N)关系
【发布时间】: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”函数的以下用例:

  1. 检查帖子是否存在。 (似乎有效)
  2. 如果是,请检查用户是否已经喜欢此帖子。
  3. 如果不是,则分配 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”数据库表中看到正确的关系。那么我该如何正确:

  1. 检查用户是否已经喜欢帖子。
  2. 分配此关系。
  3. 并删除与 Sequelize 的关系?

顺便说一句,这就是我的 PostLikes 表的样子:

+----+--------+--------+
| id | userId | postId |
+----+--------+--------+
|  1 |      2 |      3 |
+----+--------+--------+

【问题讨论】:

  • 您需要一个与UsersPosts 相关的多对多表。这在 MySQL 中很容易做到;我不知道如何说服你正在使用的抽象包来做到这一点。

标签: javascript mysql node.js orm sequelize.js


【解决方案1】:

查看文档,没有提到 isFulfilled()。 您是否尝试过 req.user.hasPost(postToLike) ? (Sequelize Doc)

【讨论】:

  • 我登录req.user.hasPost(postToLike) 并注意到“isFulfilled()”是未决承诺的结果。所以我把这部分改成await req.user.hasPost(postToLike)。基本上这解决了整个问题,因为它现在返回了预期的结果。
  • isFullfilled() 一般不直接访问。 await 期待一个承诺,并且通过调用 isFullfilled(),它没有得到等待的承诺。如果解决了问题,您能否接受答案,谢谢:)
  • 嗨,我知道它已经有一段时间了,但是为什么它是多对多关系,因为一个用户可以有很多帖子,但一个帖子属于一个用户?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
相关资源
最近更新 更多