解析关系查询

时间:2017-04-15 23:07:02

标签: android parse-platform relational

我正在努力解决Parse Relational Queries。

我想做的事:查询当前ParseUser喜欢的所有食谱。

模型(简化的伪代码) 有两个班。一个是Recipe类,另一个是类,它有关于谁喜欢哪个食谱的信息。

@ParseClassName("Like")
public class Like ParseObject{
    "fromUser" : ParserUser 
    "toRecipe": Recipe
}

@ParseClassName("Recipe")
public class Recipe : ParseObject {
    "objectId": String // from ParseObject
    // some other field.
}

我已经尝试过whereMatchesQuery()和whereMatchesKeyInQuery()方法。但是两个查询结果都是空列表。有人知道如何查询以满足我的要求吗?

使用ParseQuery.whereMatchesQuery()

的情况
ParseQuery<Like> likesQuery = ParseQuery.getQuery(Like.class);
likesQuery.whereEqualTo("fromUser", ParseUser.getCurrentUser());
ParseQuery<Recipe> recipesQuery = ParseQuery.getQuery(Recipe.class);
recipesQuery.whereMatchesQuery("toRecipe",  likesQuery);
recipesQuery.find() <- Return Empty List

使用ParseQuery.whereMatchesKeyInQuery()的案例

ParseQuery<Like> likesQuery = ParseQuery.getQuery(Like.class);
likesQuery.whereEqualTo("fromUser", ParseUser.getCurrentUser());
ParseQuery<Recipe> recipesQuery = ParseQuery.getQuery(Recipe.class);
recipesQuery.ParseQuerywhereMatchesKeyInQuery("objectId", toRecipe", likesQuery);
recipesQuery.find() <- Return Empty List

1 个答案:

答案 0 :(得分:1)

使用当前的设计,您似乎只能获取喜欢,然后使用get获取Recipe

ParseQuery<Like> likesQuery = ParseQuery.getQuery(Like.class);
likesQuery.whereEqualTo("fromUser", ParseUser.getCurrentUser());
List<Like> likes = likesQuery.find();
List<Recipe> recipes = new ArrayList(likes.size());
for (Like like : likes) {
    recipes.add(like.getRecipe());
}

您可以使用query.include()在查询结果中包含配方对象。

另一种选择是在喜欢的时候添加食谱ID字段:

@ParseClassName("Like")
public class Like ParseObject {
    "fromUser" : ParserUser 
    “toRecipe” : Recipe
    "toRecipeId": String
}

如果您这样做,可以使用whereMatchesKeyInQuery的第二个建议。