Как получить объекты PFRelation при получении объектов PFquery?

 NSPredicate *predicate=[NSPredicate predicateWithFormat:@"(UserId==%@)",[defaluts objectForKey:@"objectId"]];
    PFQuery *frndquery=[PFQuery queryWithClassName:@"FriendsDetails" predicate:predicate];
    [frndquery orderByDescending:@"lastdate"];
    [frndquery whereKey:@"BlockStatus" equalTo:@"No"];
    NSArray *arrquery=[frndquery findObjects];
   for (PFObject *frndids in arr){
        PFRelation *relation=[frndids relationforKey:@"ChatRelation"];
        NSArray *arrids=[NSArray arrayWithObjects:[frndids objectForKey:@"UserId"],[frndids objectForKey:@"ConversationID"], nil];
        PFQuery *statusQuery = [relation query];
        [statusQuery orderByDescending:@"createdAt"];
        [statusQuery whereKey:@"Deletechat" notContainedIn:arrids];
        statusQuery.limit = [[NSNumber numberWithInt:1] intValue];
        NSArray *arrforrelationobjects=[statusQuery findObjects];} 

Я хочу найти все объекты, когда мы извлекаем объекты из самого первого запроса. Пожалуйста, решите мою проблему


person Romance    schedule 18.07.2013    source источник
comment
Очень понравился Please solve my problem. :D   -  person Rui Peres    schedule 18.07.2013
comment
В frndquery я получаю объект pfrelation, в то время как я получаю объект из запроса frnd, после чего я возвращал данные из этого объекта отношения, поэтому теперь мне нужно получить объекты pfquery * frndquery, мне нужны детали объектов отношения, которые я не хочу чтобы написать код для получения объектов pfrelation за раз, мне нужно получить все детали (т.е. детали frndquery и детали отношений, благодаря этому я могу уменьшить загрузку). поэтому, пожалуйста, помогите мне   -  person Romance    schedule 02.08.2013


Ответы (1)


Существует метод, который вы можете использовать для include свойств, которые являются значениями указателя. Вы не можете использовать метод include с отношениями. Вместо этого я использую функцию Cloud Code для объединения результатов, которые я хочу, в объект JSON и возвращаю этот объект.

См. функцию fetchPostDetails в следующем скрипте.

https://github.com/brennanMKE/PostThings/blob/master/Parse/PostThings/cloud/main.js

Он извлекает элементы — это объекты отношений, такие как теги и лайки, которые являются User объектами, которые являются отношениями к Post классу. Есть также комментарии, на которые ссылаются в качестве указателя на пост из каждого комментария. Методы fetchPostTags и fetchPostLikes показывают, как получить эти отношения и заполнить объект JSON, который содержит все результаты. Вам необходимо развернуть это обновление облачного кода, а затем получить к нему доступ как к функции со стороны iOS. Результаты вернутся в виде NSDictionary со значениями для сообщений, тегов, лайков и комментариев. Посты представляют собой массив объектов Post. Теги, лайки и комментарии являются объектами NSDictionary, которые имеют postId в качестве ключа для доступа к массиву объектов Parse.

Таким образом, один вызов функции даст вам то, что вам нужно.

Я включил часть приведенного ниже кода в качестве справки на случай, если что-то на GitHub изменится.

// Helper functions in PT namespace
var PT = {

    eachItem : function (items, callback) {
        var index = 0;
        var promise = new Parse.Promise();

        var continueWhile = function(nextItemFunction, asyncFunction) {
            var item = nextItemFunction();
            if (item) {
                asyncFunction(item).then(function() {
                    continueWhile(nextItemFunction, asyncFunction);
                });
            }
            else {
                promise.resolve();
            }
        };

        var nextItem = function() {
            if (index < items.length) {
                var item = items[index];
                index++;
                return item;
            }
            else {
                return null;
            }
        };

        continueWhile(nextItem, callback);

        return promise;
    },

    arrayContainsItem : function(array, item) {
        // True if item is in array
        var i = array.length;
        while (i--) {
            if (array[i] === item) {
                return true;
            }
        }
        return false;
    },

    arrayContainsOtherArray : function(array, otherArray) {
        /// True if each item in other array is in array
        var i = otherArray.length;
        while (i--) {
            if (!PT.arrayContainsItem(array, otherArray[i])) {
                return false;
            }
        }
        return true;
    },

    fetchPostTags : function(post) {
        return post.relation("tags").query().find();
    },

    fetchPostLikes : function(post) {
        return post.relation("likes").query().find();
    },

    fetchPostComments : function(post) {
        var query = new Parse.Query(Comment);
        query.include("owner");
        query.equalTo("post", post);
        return query.find();
    },

    fetchPostDetails : function(post, json) {
        json.tags[post.id] = [];
        json.likes[post.id] = [];
        json.comments[post.id] = [];

        return PT.fetchPostTags(post).then(function(tags) {
            json.tags[post.id] = tags;
            return PT.fetchPostLikes(post);
        }).then(function(likes) {
            json.likes[post.id] = likes;
            return PT.fetchPostComments(post);
        }).then(function(comments) {
            json.comments[post.id] = comments;
            json.count++;
            return Parse.Promise.as();
        });
    },

};
person Brennan    schedule 15.12.2013