PFQuery 其中 whereKey 是指针
PFQuery in which whereKey is pointer
我有 2 个 classes:帖子 class 和用户 class。我一直在尝试查询 Posts class 以仅显示当前用户关注的帖子。我这样做:
[query whereKey:@"user" containedIn:[PFUser currentUser][@"followings"]];
第"followings"列是包含当前用户关注的objectId的数组。我的问题似乎在于 Posts class 中的键 @"user" 是指向用户 class 的指针并导致此错误:
Error: pointer field user needs a pointer value (Code: 102, Version: 1.2.10)
我该怎么办?提前致谢。
编辑 1: 添加了信息
这里我提供关于上述 2 classes 的详细信息:
- 帖子class
objectId(字符串)----文本(字符串)----用户(指针)----...
- 用户class
objectId(string)----username(string)----followings(array of users'objectId)----...
据我所知,在 Parse 的数组中不能有指针,您必须将用户的 objectId 放入数组 "followings",然后在数组中搜索该值。然后你可以像这样搜索 PFUser:
PFQuery *query = [PFUser query];
[query whereKey:@"objectId" equalTo:@"INSERT-OBJECT-ID-IN-ARRAY"];
PFUser *user = (PFUser *)[query getFirstObject];
要仅获取当前用户的 posts,您需要使用 user Where query from parse 您需要在其中传递当前用户
我post在这里提供一个小代码片段,可以让您清楚地了解
PFQuery *query = [PFQuery queryWithClassName:@"PostTable"];
[query whereKey:@"user" equalTo:[PFUser currentUser]]; // "user" must be pointer in the post class (table)
[query orderByDescending:@"createdAt"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
for (PFObject *obj in objects) {
NSLog(@"object %@",obj);
}
}
if (error) {
[_delegate gotError:error forTable:TABLE_MEDIA];
}
}];
在上面的代码片段中,它只会给你属于你当前用户的 post,如果你想要任何其他用户的 post,你应该在 where 查询中传递该用户实例。
因此,要获得关注用户的 post,您必须通过指针解析所有关注用户,并通过上述查询获取他们的 post。
要使指针在数组中的单行中,请参考下面的代码。
[userClass addObject:userPointer forKey:@"following"];
所以现在当你得到用户时,你将拥有以下所有带指针的用户,你可以通过上面的代码片段
得到它的post
我通过使用 matchesQuery:
实现了只查询当前用户关注的帖子
PFQuery *userQuery = [PFUser query];
[userQuery whereKey:@"objectId" containedIn:[PFUser currentUser][@"followings"]];
[query whereKey:@"user" matchesQuery:userQuery];
已检查的响应swift版本
//Create an user query
let userQuery = PFUser.query()
//get all PFUser contained in string array
userQuery?.whereKey("objectId", containedIn: PFUser.currentUser()!["FollowArray"]as! [String])
//add subquery
query.whereKey("user", matchesQuery: userQuery!)
我有 2 个 classes:帖子 class 和用户 class。我一直在尝试查询 Posts class 以仅显示当前用户关注的帖子。我这样做:
[query whereKey:@"user" containedIn:[PFUser currentUser][@"followings"]];
第"followings"列是包含当前用户关注的objectId的数组。我的问题似乎在于 Posts class 中的键 @"user" 是指向用户 class 的指针并导致此错误:
Error: pointer field user needs a pointer value (Code: 102, Version: 1.2.10)
我该怎么办?提前致谢。
编辑 1: 添加了信息
这里我提供关于上述 2 classes 的详细信息:
- 帖子class
objectId(字符串)----文本(字符串)----用户(指针)----...
- 用户class
objectId(string)----username(string)----followings(array of users'objectId)----...
据我所知,在 Parse 的数组中不能有指针,您必须将用户的 objectId 放入数组 "followings",然后在数组中搜索该值。然后你可以像这样搜索 PFUser:
PFQuery *query = [PFUser query];
[query whereKey:@"objectId" equalTo:@"INSERT-OBJECT-ID-IN-ARRAY"];
PFUser *user = (PFUser *)[query getFirstObject];
要仅获取当前用户的 posts,您需要使用 user Where query from parse 您需要在其中传递当前用户
我post在这里提供一个小代码片段,可以让您清楚地了解
PFQuery *query = [PFQuery queryWithClassName:@"PostTable"];
[query whereKey:@"user" equalTo:[PFUser currentUser]]; // "user" must be pointer in the post class (table)
[query orderByDescending:@"createdAt"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
for (PFObject *obj in objects) {
NSLog(@"object %@",obj);
}
}
if (error) {
[_delegate gotError:error forTable:TABLE_MEDIA];
}
}];
在上面的代码片段中,它只会给你属于你当前用户的 post,如果你想要任何其他用户的 post,你应该在 where 查询中传递该用户实例。
因此,要获得关注用户的 post,您必须通过指针解析所有关注用户,并通过上述查询获取他们的 post。
要使指针在数组中的单行中,请参考下面的代码。
[userClass addObject:userPointer forKey:@"following"];
所以现在当你得到用户时,你将拥有以下所有带指针的用户,你可以通过上面的代码片段
得到它的post我通过使用 matchesQuery:
实现了只查询当前用户关注的帖子PFQuery *userQuery = [PFUser query];
[userQuery whereKey:@"objectId" containedIn:[PFUser currentUser][@"followings"]];
[query whereKey:@"user" matchesQuery:userQuery];
已检查的响应swift版本
//Create an user query
let userQuery = PFUser.query()
//get all PFUser contained in string array
userQuery?.whereKey("objectId", containedIn: PFUser.currentUser()!["FollowArray"]as! [String])
//add subquery
query.whereKey("user", matchesQuery: userQuery!)