可以新建一个 Like
表并让这个表包含动态(post
)和用户(user
)这两个字段。
按照这种结构设计数据表的话,每次客户端需要加载动态列表时都要进行两次请求:
- 第一个请求从
Post
表获取动态列表。
- 第二个请求拿着从第一个请求里面获取到的动态列表查询
Like
表里面「user
为当前用户」且「post
为动态列表中的任意一个对象」的对象。
第二个请求完成后,可以从获取到的 Like
对象里提取出所有 post
字段的 id
,这些便是当前用户点赞过的动态的 id
。后续可以在客户端将动态列表中的每个 Post
对象的 id
与这些 id
比对,并在 UI 上作出相应展示。
完整代码如下:
const getLikes = async (user) => {
const postQuery = new AV.Query("Post");
const posts = await postQuery.find();
const likeQuery = new AV.Query("Like");
likeQuery.equalTo("user", user);
likeQuery.containedIn("post", posts);
const likes = await likeQuery.find();
return likes;
};
const likes = await getLikes(AV.User.current());
console.log(likes.map((like) => like.get("post").id));