我正在努力解决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
答案 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
的第二个建议。