2015-11-02 47 views
1

我們有一個表名userProfile,它具有指針userId指向用戶表。 我們正在USERPROFILE無法在解析中對PFUser類應用內部查詢

   PFQuery *query = [PFQuery queryWithClassName:@"UserProfile"]; 
       [query whereKey:@"userId" equalTo:[PFUser currentUser]]; 
       [query whereKey:@"relation" equalTo:@"Agent"]; 
       [query includeKey:@"userId"]; 
       [query includeKey:@"profileId.userId"]; 
       query.skip = arrProfiles.count; 
       query.limit = 15; 
       NSString *searchText = [NSString stringWithFormat:@"%@",self.searchBar.text]; 


       **PFQuery *innerQuery =[PFUser query]; 
       [innerQuery whereKey:@"username" matchesRegex:[NSString stringWithFormat:@"(?i)%@",searchText]]; 
       [query whereKey:@"userId" matchesQuery:innerQuery];** 



       [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 

       }]; 

應用內查詢,但我們無法將內部查詢後得到任何結果。

回答

0

在查詢中,您表示userId必須與當前用戶相同。但是在內部查詢中,您說的是userId必須將用戶與在搜索字段中輸入的用戶名進行匹配。

這意味着查詢必須滿足兩個約束才能返回結果。這隻有在當前用戶真正在尋找自己的情況下才會發生。

如果您正在尋找BOTH當前用戶的配置文件和搜索的配置文件,您需要使用或查詢,像這樣:

PFQuery *firstQuery = [PFQuery queryWithClassName:@"UserProfile"]; 
[query whereKey:@"userId" equalTo:[PFUser currentUser]]; 

NSString *searchText = [NSString stringWithFormat:@"%@",self.searchBar.text]; 

PFQuery *innerQuery =[PFUser query]; 
[innerQuery whereKey:@"username" matchesRegex:[NSString stringWithFormat:@"(?i)%@",searchText]]; 

PFQuery *secondQuery = [PFQuery queryWithClassName:@"UserProfile"]; 
[secondQuery whereKey:@"userId" matchesQuery:innerQuery]; 

PFQuery *query = [PFQuery orQueryWithSubqueries:[firstQuery, secondQuery]]; 

[query whereKey:@"relation" equalTo:@"Agent"]; 
[query includeKey:@"profileId.userId"]; 
query.skip = arrProfiles.count; 
query.limit = 15; 

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 

}]; 
+0

如果我刪除條件的用戶標識已等於當前用戶然後也沒有結果。 –

+0

你確定userId的值是currentUser(指向_User類的指針,而不僅僅是一個objectId)嗎?你是否確定它沒有被跳過,因爲arrProfiles.count是> 0? –

+0

看看我們是否刪除了內部查詢,我們得到了結果。 query.skip也是0 –