解析中的子查询whereKey:doesNotMatchKey:inQuery:其中innerquery返回对象,而不是字符串

时间:2014-11-05 18:23:48

标签: ios parse-platform subquery

我正在尝试获取内部查询中未包含的对象(MainObject),但它不起作用。 它返回对象,就像没有定义内部查询一样。

我想这是因为我的内部查询返回对象,而在whereKey:doesNotMatchKey:inQuery:它正在等待一个字符串与objectId进行比较。

PFQuery *queryInner = [PFQuery queryWithClassName:@"InnerObject"];
[queryInner whereKey:@"status" equalTo:[NSNumber numberWithInt:0]];
[queryInner selectKeys:@[@"principalObject"]];

PFQuery *queryPrincipal = [PFQuery queryWithClassName:@"MainObject"];
[queryPrincipal whereKey:@"owner" equalTo:[PFUser currentUser]];
[queryPrincipal whereKey:@"objectId" doesNotMatchKey:@"principalObject" inQuery:queryInner];

[queryPrincipal findObjectsInBackgroundWithBlock:^(NSArray *returnedData, NSError *error) {
...
...

是否可以使用2个请求提取innerQuery中对象的objectID? 是否可以将作为String的列(objectId)与另一列中的Object(principalObject)进行比较?

感谢。

1 个答案:

答案 0 :(得分:0)

正如Parse Google网上论坛中的Wes建议:https://groups.google.com/d/msgid/parse-developers/46b5b8a9-dbb8-464d-8f54-db884e95d49e%40googlegroups.com

我对这个问题的解决方法是为我的" InnerObject"添加一个额外的键。只包含objectId的表。所以你将拥有指针列(principalObject)和ID(principalObjectId)。使用ID作为字符串,查询可以工作但是我们在InnerObject中有一个新的不必要的列浪费了一些空间并且稍微重载了对象的创建

为了简单起见,只需将其添加到" InnerObject"的beforeSave中。在云代码中。例如......

Parse.Cloud.beforeSave("InnerObject", function(request, response) {
  var myInnerObject = request.object;
  if (myInnerObject.get("principalObject") != null && myInnerObject.get("principalObject").id != myInnerObject.get("principalObjectId")) { //Make sure it is set and it is not done 
    myInnerObject.set("pricipalObjectId", myInnerObject.get("principalObject").id); //The pointer won't have other data but it does have the ID
  }
  response.success();
});

如果只有一个查询约束whereDoesNotMatchQuery:它允许指向对象的指针而不仅仅是字符串键,那将是非常好的。