2014-04-09 20 views
33

Tôi có chức năng đám mây trên Parse. Khi nó được gọi là nó lấy một PFObject sau đó thêm một mối quan hệ giữa đối tượng đó và người dùng. Phần này hoạt động tốt (Nhìn vào cuối chức năng). Tôi đang gặp sự cố khi nhận các truy vấn mà chọn PFObject để bỏ qua những người dùng đã được liên quan đếnCú pháp truy vấn quan hệ mã đám mây Parse

Đây là mã của tôi:

Parse.Cloud.define("NextMedia", function (request, response) { 

    var LikeRequest = Parse.Object.extend("LikeRequest"); 
    var query = new Parse.Query(LikeRequest); 

    query.equalTo("completed", false); 
    console.log("user: " + Parse.User.current().id); 

    query.notEqualTo("user", Parse.User.current()); 

    // Also only fetch if never been sent before 
    // HERE SHOULD USE THE BELOW RELATIONSHIP 
    var innerQuery = new Parse.Query(Parse.User); 
    innerQuery.exists(Parse.User); 
    query.matchesQuery("sentTo", innerQuery); 

    query.ascending("createdAt"); 

    query.first({ 

     success: function (object) { 
      // Successfully retrieved the object. 
      console.log("Got 1 object: " + object.get('mediaId')); 

      // Record that the user has been sent it 
      var user = Parse.User.current(); 
      var relation = object.relation("sentTo"); // RELATION ADDED HERE 

      relation.add(user); 
      object.save(); 

      response.success(object); 
     }, 
     error: function (error) { 
      console.log("Error: " + error.code + " " + error.message); 

      response.error("Error getting next mediaId"); 
     } 
    }); 
}); 

tôi chắc chắn rằng tôi chỉ không hiểu như thế nào cú pháp truy vấn quan hệ hoạt động.

+0

Trên lớp LikeRequest của bạn, bạn có cột người dùng không? Tôi không hiểu query.notEqualTo ("user", Parse.User.current()); – bmurmistro

+0

Trong phần dưới cùng, nơi nó thêm các quan hệ, đó là thêm một nhiều đến nhiều cột người dùng. – Darren

+0

Xin lỗi vì phản hồi bị trì hoãn. Bạn đã thử một cái gì đó như thế này: var innerQuery = LikeRequest.relation ("sendTo"). Query(); innerQuery.exists (Parse.User); – bmurmistro

Trả lời

1

còn khoảng Query Constraints?

Nếu bạn muốn lấy đối tượng không phù hợp với bất kỳ một số giá trị mà bạn có thể sử dụng notContainedIn

// Finds objects from anyone who is neither Jonathan, Dario, nor Shawn 
query.notContainedIn("playerName", 
        ["Jonathan Walsh", "Dario Wunsch", "Shawn Simon"]); 
1

Tôi nghĩ Kerem có nó một phần đúng nhưng notContained tại là không đủ năng động cho trường hợp của bạn.

Bạn cần phải xây dựng các query from the relation và sau đó sử dụng doesNotMatchKeyInQuery để loại trừ các đối tượng từ truy vấn bên ngoài của bạn.

2

căng này:

// Also only fetch if never been sent before 
// HERE SHOULD USE THE BELOW RELATIONSHIP 
var innerQuery = new Parse.Query(Parse.User); 
innerQuery.exists(Parse.User); 
query.matchesQuery("sentTo", innerQuery); 

thể được thay đổi để:

// Also only fetch if never been sent before 
query.notContainedIn("sentTo",[Parse.User.current()]) 

đó làm việc. Parse Query

Các vấn đề liên quan