2017-10-13 99 views
0

我有類「用戶」默認的解析Dashboad。我也有班級「朋友」,我在這裏存儲用戶之間的友誼: 有兩列「toUser」和「fromUser」,它們顯示了兩個用戶發送好友請求的人。這兩列是指向用戶類的指針(指針< _User>)。解析雲權查詢檢索Friendslist而不是(像Instagram)

我的概念是檢索兩個列表: 1.好友列表,爲用戶的登錄用戶 2.用戶列表(誰不是朋友與登錄的用戶)

什麼是對的合適查詢?

邏輯第一個不應該掃描所有的類用戶,因爲它可能被利用離子3應用程序和角4

的性能比較慢下來謝謝

回答

0

你並不需要另一個類這樣做,你需要的是在默認的用戶類別的關係列

增加新的朋友,你只需要下面的代碼

var friendtoadd 
//this is the friend object from parse user class you want to add you can get it by anyway you want 
var currentUser = Parse.User.current(); 
var relation = currentUser.relation("friends"); 
relation.add(friendtoadd) 
currentUser.save(); 

檢索的朋友陣列的登錄的用戶可以使用以下代碼

var currentUser = Parse.User.current(); 
    var friendRelation = currentUser.relation('friends'); 
    var env = this 
    friendRelation.query().find({ 
    success: function(users) { 
     for (var i = 0; i< users.length; i++) { 
     var object = users[i]; 
     env.friends.push(object) 
     console.log(env.friends) 
     } 


     } 
    }); 

//你應該定義的朋友= [];在類

+0

通過這種方式獲取與當前用戶不是朋友的用戶列表是壞主意,因爲他可能有0個朋友,在這種情況下,您將運行一個非常緩慢的查詢來獲取數據庫的所有用戶 –

+0

謝謝你的馬科斯,我明白了,但是我需要班級「朋友」,因爲我從中檢索了額外的信息,比如朋友請求發送的用戶的推送和本地通知。並且你對所有用戶的查詢都是正確的,只想通過在用戶輸入用戶名時篩選搜索用戶來限制它,例如instagram。但是,怎麼..?總的來說,我需要instagram的哲學 – giorgionasis

0

如果我明白你的問題的權利,你想找到你的朋友請求你sent,或者你的received。因爲我不知道你在哪裏與用戶和他的朋友建立了關係。 這是代碼,如果你想這樣做使用雲代碼:

首先,我確認被保存在friendRequest的參數:

Parse.Cloud.beforeSave("Friends", function(request, response){ 
    var friendRequest = request.object; 
    if (!friendRequest.has("toUser") || !friendRequest.has("fromUser")) { 
    response.error("Invalid parameters"); 
    return; 
    } 
    response.success(); 
}); 

然後我創建了兩個雲功能,一個用於檢索sentRequests

Parse.Cloud.define("getSentRequests", function(request, response){ 
    var query = new Parse.Query("Friends"); 
    query.equalTo("fromUser", request.user); 
    if (!request.master) { 
    query.find({ sessionToken: request.user.getSessionToken() }).then(function(friends){ 
     response.success(friends); 
    }); 
    }else{ 
    query.find({useMasterKey:true}).then(function(friends){ 
     response.success(friends); 
    }); 
    } 
}); 

,你可以從一個登錄的用戶或使用masterKey,如果你想和其他查詢是針對recievedRequests稱之爲:

Parse.Cloud.define("getRecievedRequests", function(request, response){ 
    var query = new Parse.Query("Friends"); 
    query.equalTo("toUser", request.user); 
    if (!request.master) { 
    query.find({ sessionToken: request.user.getSessionToken() }).then(function(users){ 
     response.success(users); 
    }); 
    }else{ 
    query.find({useMasterKey:true}).then(function(users){ 
     response.success(users); 
    }); 
    } 
}); 
+0

謝謝Abubakr。我附上圖像更加水晶。表級「朋友」已經存儲了朋友。誰發送了請求,誰收到了它。作爲登錄用戶,我想檢索我的朋友[鏈接](https:// imgur。com/a/XWWT8) – giorgionasis

+0

對不起,我不熟悉離子3和角4,但有一點研究,我發現你可以調用函數名稱並使用提供程序攔截結果,我不完全瞭解如何發佈回答如果你找到正確的代碼。 –

+0

我知道如何調用雲功能,但在此之前,我應該定義數據庫的結構或查詢的概念以檢索我想要的東西 – giorgionasis