2015-05-08 2 views
1

У меня есть 2 класса объектов Parse, A и B. Объекты класса B имеют ссылки на объекты класса A с помощью ключа @"referenceA".Проанализируйте запрос, чтобы найти все объекты класса A, на которые ссылаются найденные объекты класса B

Я хочу, чтобы выполнить запрос, который находит все объекты А, которые ссылаются на определенный набор объектов Б.

Я считаю, что я должен был использовать 2 запросов: queryB является ограниченным запросов на класс В, возвращает этот определенный набор объектов B, а затем queryA, который возвращает все объекты A, на которые ссылаются объекты, найденные queryB.
Однако я не мог найти способ сделать это, ни в документации, ни в должностях:

[queryA whereKey:@"SELF" matchesKey:@"referenceA" inQuery:queryB]; 

по-видимому, здесь не работает. Я также попытался использовать предикатный запрос без успеха.

Конечно, я мог загрузить ссылки объекты А, используя includeKey:@"referenceA" в queryB, но возвращаемые объекты по-прежнему класса В. Таким образом, я не могу использовать такой queryB с includeKey: в PFQueryTableViewController для отображения объектов, на который ссылается А.
Любое предложение?

+0

Итак, 'B' имеет указательный столбец' referenceA' '' 'A'? У 'A' есть ссылка на' B' и для чего еще используется 'referenceA'? – Wain

+0

A не имеет ссылки на B. referenceA в объекте B просто означает «Я использую этот объект A». Я просто хочу узнать, какие объекты A используются найденным набором объектов B. –

+0

Да, поэтому, если вы поместите ссылку на 'A', а затем выполните поиск' A', используемого указанным 'B', у вас есть решение, если вы можете и насколько сложно это будет – Wain

ответ

1

После прочтения комментариев, вот мой вопрос о вашей проблеме.

По моему мнению, PFQueryTableViewController сдерживает вас излишне, поскольку это мешает вам выполнять именно то, что вы делаете. Это заставляет вас построить запрос, который возвращает объекты, которые будут отображаться, и не предоставляет механизма для отображения дочерних узлов, например. В моем случае я завершил его подклассификацией, чтобы добавить методы, которые позволят вам изменять данные, используемые в представлении таблицы после того, как они получены с сервера и до того, как они будут отображаться на экране. Это позволяет получить список объектов B с сервера, использовать includeKey, а также загрузить объекты A, а затем, когда вы получите данные с сервера, вы можете изменить его как список объектов A, на которые ссылаются B объектов, возвращаемых запросом.

Это позволит вам снизить сложность вашей базы данных, если это вас беспокоит.

+0

Интересно, я не думал об этой возможности. Я предполагаю, что вы перезаписали loadObjects в своем подклассе, чтобы вернуть дочерние объекты? –

+0

Да, вам нужно было бы это сделать, а затем, возможно, предоставить какой-то метод под названием «modifyObjects» или что-то, что принимает массив «PFObjects» и возвращает еще один массив «PFObjects». – hhanesand

+0

Я понял, что loadObjects - это частный метод, но можно переписать объектыDidLoad и изменить свойство объектов. Один из недостатков заключается в том, что дочерние объекты также должны быть отсортированы там, тогда как в качестве двухэтапного запроса, как я его пробовал сначала, сделайте это автоматически, используя, например, его orderByDescending: метод. Я до сих пор не понимаю, почему мой подход '[queryA whereKey: @" SELF "соответствуетKey: @" referenceA "inQuery: queryB];' не работает ... –

0

Та же проблема была answered in the Parse Google group.
Если вы хотите (как я) использовать один реляционный запрос (whereKey:matchesKey:), нужно добавить колонку строки, в которой хранятся objectId из referenceA в objectsB.
Жаль, что Parse, по-видимому, не дает разумного решения этой довольно старой проблемы.

Смежные вопросы