2016-03-16 1 views
0

В моем приложении я использую услугу Parse.com. И у меня есть объекты с именем Item и Price. Один элемент может иметь несколько цен, что означает, что у каждого ценового объекта есть ссылка на его элемент. Предмет не осведомлен о ценах вообще. И моя цель - получить товар и его цены в одном запросе. Если бы у меня был элемент с множеством цен, это было бы очень просто. Я бы сделал следующее:Parse.com один-ко-многим проблема. Возможно ли получить все в одном запросе?

PFQuery* itemsQuery = [PFQuery queryWithClassName:@"Item"]; 
[itemsQuery includeKey:@"Prices"]; 

, но у меня нет массива. Поэтому я буду вынужден иметь два последовательных запроса. Первый из них будет получать деталь и один раз элемент готов я создам вторую:

PFQuery* query = [PFQuery queryWithClassName:@"Price"]; 
[query whereKey:@"Item" equalTo:fetchedItem]; 

Но мне не нравится это. Я хотел бы получить товар и его цены только в одном запросе. Возможно ли это сделать без использования массивов?

ответ

1

Вы думаете о большом количестве СУБД и небольшом NoSQL. База данных синтаксического анализа является хранилищем NoSQL, поэтому вы не имеете тех же характеристик, что и в реляционной базе данных.

Решение в этом случае - это в NoSQL в таких случаях чаще, чем объединение таблиц - для хранения ваших цен в структуре массива непосредственно внутри объекта Item и запроса.

Вот родственная связь с Parse.com форумов:

https://www.parse.com/questions/how-to-join-several-tables-with-one-to-many-relationship

+0

, но, насколько я знаю, что это невозможно «, чтобы сохранить ваши цены в виде массива прямо внутри объекта Item ", я могу хранить массив указателей, а не массив объектов, правильно? –

+0

Да, я думаю, что это сработает, если вы сохраните массив указателей, а затем используйте что-то вроде 'query.includeKey (« prices »)' или что-то в этом роде. Однако будьте осторожны, вы, вероятно, захотите использовать какой-нибудь Parse SDK, чтобы вставить эти указатели, поскольку они имеют свой собственный вид структуры для этого. Из одной из моих моделей синтаксического анализа массив выглядит примерно так: '[{" __type ":" Pointer "," className ":" YourClass "," objectId ":" qIwoT8wr5g "}, {" __ type ":" Pointer »,« className »:« YourClass »,« objectId »:« GGdr5RdhXn »}]' –

+0

проблема (как я сказал в моем вопросе): у меня не может быть такого массива. Не так ли? всего два вопроса? Или, может быть, некоторые функции облачного кода помогут? –

0

Ваш классу 'цена' будет нужен столбец 'указатель' на элемент. Указатели - это PFObjects, в вашем случае - объект Item. После этого вы можете сделать запрос на класс «цена», чтобы получить массив объектов цен назад (NSArray * объекты):

PFQuery *query = [PFQuery queryWithClassName:@"Price"]; 
[query includeKey:@"item"]; 
[query whereKey:@"item" equalTo:selectedItem]; 
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
    if (objects) { 
     // do something with price objects here 
    } 
}]; 
+0

вы не читали вопрос, приятель. посмотрите на эту строку [запрос whereKey: @ "item" equalTo: selectedItem]; где вы взяли предмет? в предыдущем запросе, правильно?поэтому у вас есть два запроса: сначала для элемента, а второй - цены. но мне нужно взять все это, элемент и его цены только в одном запросе –

+0

нет, это один запрос. прочитайте документы. – inga

+0

Я прочитал документы, но это не важно в этом случае. смотрите здесь [запрос whereKey: @ "item" equalTo: selectedItem] ;. ты видишь? SelectedItem. он уже здесь. Где ты это взял? Как? Когда? –