使用关系类查找数据

时间:2014-07-04 22:53:19

标签: android parse-platform

我正在开发一个使用Parse.com在线数据库的Android应用程序,而且我很难绕过类之间的关系。

我定义了以下类:User(默认),PrivateInfo,Relationships。

关系类是用户(存储为指针的用户)之间的多对多类,而PrivateInfo类包含特定于用户(存储为指针)的信息,只能由所述用户或存在于其中的用户访问。一段感情。例如,如果用户A与用户B处于关系中,则A应该能够访问此私人信息。

我有一项活动,其中显示所有用户的私人信息。如何构建一个查询,从当前用户的关系中获取所有用户的privateInfo?我已经在文档中看到了内部查询的用法,我认为这应该是我应该使用的,但是ParseObjects的使用让我感到困惑,因为我必须使用PrivateInfo和Relationship ParseObjects,而不是User parseObject,这是privateInfo类所指向的。

2 个答案:

答案 0 :(得分:1)

文档中容易遗漏的部分是Relations Guide,它比我在答案中更详细地解释了不同类型的关系。

关于对" userA"进行查询,希望获取所有PrivateInfo个对象,这些对象适用于具有Relationship记录的用户指向" userA& #34;:

ParseQuery<ParseObject> relationQuery = ParseQuery.getQuery("Relationship");
relationQuery.whereEqualTo("user", userA);

ParseQuery<ParseObject> privateInfoQuery = ParseQuery.getQuery("PrivateInfo");
// find records where PrivateInfo.user == Relationship.relatedToUser
privateInfoQuery.whereMatchesKeyInQuery("user", "relatedToUser", relationQuery);
// if you also need the User so you can show info about them
privateInfoQuery.include("user");

这假定您的类具有以下列:

  • PrivateInfo
    • user:Pointer&lt; _User&gt;
  • 关系
    • user:Pointer&lt; _User&gt;
    • relatedToUser:Pointer&lt; _User&gt;

如果你需要获得反向关系的私人信息,它会变得更加棘手。如果需要,我可以提供示例OR查询。

答案 1 :(得分:0)

您可能希望查看有关ACL和安全性的REST Api文档。

如果你有关于w / B的用户A,你可以在B的privateInfo上UPD ACL READ,给予A读访问权。

然后你可以在任何查询和额外的类上做一个'include = ClassPointedTO'(私有信息将被内联以响应带有敏感数据的平面查询)。

如果删除关系,则必须保持信息一致,并且还要更新ACL元素以删除已删除关系的已删除目标上的读取。

- EDIT-- 因此,在创建Privateinfo条目时,您可以根据需要向创建用户授予ACL READ。或者,您可以将ACL READ授予创建用户所在的Role条目。或者您可以同时执行这两项操作。您还需要创建用户的ACL WRITE。

之后,在任何用户的任何查询中,您将在私有信息的直接查询或使用“?include = Privateinfo”的查询中获得以下内容...

具有READ(直接或通过用户所属角色)的用户将在响应中拥有他们具有READ的Privateinfo条目。