【原】使用Bmob作為iOS后台開發心得——查詢關聯關系(BmobRelation)


本文轉載請注明出處 —— polobymulberry-博客園

簡介

Bmob中的數據關聯分為Pointer和Relation兩種(數據關聯在我開發app過程中使用還是很頻繁的,也算個難點。雖然之前沒有學過數據庫,但是覺得還是有必要熟悉和掌握它),對此,Bmob官方文檔已經介紹得很詳細了。

基本上查看文檔就可以解決大部分數據關聯的問題(Bmob的文檔真心要贊一下)。這里我記錄下當時我最難理解的一個部分——查詢關聯關系

還是使用官方文檔的事例來學習(這一處官網有些地方的objectId書寫錯了,記錄下時間2015-09-14)。

Post表(所有用戶發表的文章都放在Post表中content指文章內容,title指文章標題,author是Pointer類型,指向_User表)

relationship_7

_User表(username表示用戶名,password表示用戶密碼)

relationship_8

 

舉例

我們的任務是查詢(喜歡Post表中objectId為a397e97451這篇文章的所有用戶,簡單說就是查找objectId為a397e97451文章中likes中關聯(Relation)的所有User)

   //關聯對象表
    BmobQuery *bquery = [BmobQuery queryWithClassName:@"_User"];

    //需要查詢的列
    BmobObject *post = [BmobObject objectWithoutDatatWithClassName:@"Post" objectId:@"a397e97451"];
    [bquery whereObjectKey:@"likes" relatedTo:post];


    [bquery findObjectsInBackgroundWithBlock:^(NSArray *array, NSError *error) {
        if (error) {
            NSLog(@"%@",error);
        } else {
            for (BmobObject *user in array) {
                NSLog(@"%@",[user objectForKey:@"username"]);
            }
        }
    }];

以上時官網給出的查詢代碼。但是我一開始實在無法理解這種查詢方式,bquery明顯和“likes”和post不是一條路上的。直到我看到了下面這句話:

跟Pointer不同的是,此處Relation查詢的本質是_User表。

所以上面代碼實際上做的是什么工作了?

1.因為我們要找的是所有喜歡這篇文章的User,所以我們先在_User表中查找所有User。

2.但是我們上一步所找到的User很多不喜歡這篇文章,所以得有一個篩選方法。而這個篩選方式就是whereObjectKey:relatedTo:,relatedTo指向的就是我要查詢的那篇文章,而whereObjectKey指向的就是該文章對應的User關聯關系。至於為什么要加whereObjectKey,是因為Post表中可能有多個關聯User的關系,比如后期可能加入所以點評該文章的用戶(關聯User的關系)。我們可以這樣理解,上一步的bquery中存放着_User表中所有User,而Post的likes中存放的是喜歡該文章User的objectId(或指針之類的統一標識)。然后遍歷所有User,找到對應objectId相等的User,存取下來,作為查找結果。(以上純屬猜測!!!)

NSMutableArray *searchResult = 初始化;
for(BmobUser *user in _User表中所有User)
{    
if (user.objectId 等於post的likes中某個objectId )  
    {         
        [searchResult addUser:user];
    }
}
return searchResult; // 存放了所要查詢的User

總結

715314-20150914194236023-1507138033


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM