【发布时间】: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 中很容易做到;我不知道如何说服你正在使用的抽象包来做到这一点。
标签: javascript mysql node.js orm sequelize.js