例如,如何在 REST 云代码中实现"group membership"多对多 Parse.com?



用户可以创建组组必须是由用户创建的

一个用户可以属于多个组一个组可以有多个用户

我有如下内容:

Parse.Cloud.afterSave('Group', function(request) {
var creator = request.user;
var group = request.object;
var wasGroupCreated = group.existed;
if(wasGroupCreated) {
    var hasCreatedRelation = creator.relation('hasCreated');
    hasCreatedRelation.add(group);
    var isAMemberOfRelation = creator.relation('isMemberOf');
    isAMemberOfRelation.add(group);
    creator.save();
}
});

现在,当我用include=isMemberOf,hasCreated获取user/me时,它返回给我user对象,但带有以下内容:

hasCreated: {
__type: "Relation"
className: "Group"
},
isMemberOf: {
__type: "Relation"
className: "Group"
}

我想有组对象包含在说,'hasCreated'和'isMemberOf'数组。我如何使用REST API拉?

更一般地说,我的方法是正确的吗?想法吗?非常感谢您的帮助!

首先,existed是一个返回true或false的函数(在您的情况下,wasGroupCreated变量始终是对该函数的引用,并且它将始终计算为true)。如果你正确使用它,它可能不会返回你所期望的结果。

我认为你想要的是isNew()函数,虽然我会测试这是否适用于Parse.Cloud.afterSave()方法,因为我没有在那里尝试过。

至于你问题的第二部分,你似乎想像使用数组一样使用关系。如果您使用数组代替(并且大小足够小),那么您可以在查询中包含Group对象(例如在REST查询中将include参数集添加到isMemberOf)。

如果您确实想坚持使用关系,请意识到您需要在文档中阅读更多内容。特别是,您需要使用一个where表达式来查询Group对象,该表达式为用户提供了一个$relatedTo指针。要以这种方式查询,您可能需要在Group上有一个members属性,该属性与Users有关系。

在您的REST查询中,类似这样的东西可能会起作用(当然,将objectId替换为正确的User):
where={"$relatedTo":{"object":{"__type":"Pointer","className":"_User","objectId":"8TOXdXf3tz"},"key":"members"}}

最新更新