запрос с помощью Parse

Я хочу создать запрос, который будет проверять в определенном классе, существует ли что-то в двух полях (я хочу отображать для каждого из них значение ИЛИ, а не И). Это то, что я сделал, но это не работает (на основе некоторых примеров, которые я видел)

    PFQuery *query = [PFQuery queryWithClassName: self.parseClassName];
   [query whereKeyExists:@"name"];  //this is based on whatever query you are trying to accomplish
    [query whereKeyExists:@"city"]; //this is based on whatever query you are trying to accomplish
    [query whereKey:@"description" containsString:searchTerm];

как мне это сделать?

** Я хочу получить в своем запросе все результаты, содержащие searchTeam из всех полей (имя, город, описание)

Спасибо


person Chris Humpry    schedule 20.09.2013    source источник


Ответы (3)


ответ на этот вопрос довольно прост, просто нужно добавить несколько вызовов метода whereKey к одному и тому же объекту запроса. Например:

   PFQuery *query = [PFQuery queryWithClassName: self.parseClassName];
   [query whereKey:@"name" equal:@"someName"];
   [query whereKey:@"city" equal:@"someCity"];
   [query whereKey:@"description" containsString:searchTerm];

Это будет оцениваться как исходное желаемое утверждение.

person royherma    schedule 27.10.2014

Если я правильно понял ваш вопрос, вы хотите проверить, указан ли ваш searchTerm в имени, городе или описании. Вот как это сделать:

PFQuery * nameQuery = [PFQuery queryWithClassName: self.parseClassName];
[nameQuery whereKey:"name" containsString:searchTerm];
PFQuery * cityQuery = [PFQuery queryWithClassName: self.parseClassName];
[nameQuery whereKey:"city" containsString:searchTerm];
PFQuery * descriptionQuery = [PFQuery queryWithClassName: self.parseClassName];
[nameQuery whereKey:"description" containsString:searchTerm];

PFQuery * query = [PFQuery orQueryWithSubqueries:@[nameQuery, cityQuery, descriptionQuery]];

Это создает соединение или запрос из массива запросов. То, что вы делали раньше, добавляя дополнительные ограничения к тому же запросу, было таким же, как и при написании запроса AND.

IE: keyExists:@"имя" И keyExists:@"город" И описание СОДЕРЖИТ searchTerm

person Zoe    schedule 24.09.2013
comment
Я думаю, что это неправильно, это то же самое, что и запрос ИЛИ (как указано в названии метода...) - person royherma; 21.05.2014
comment
То, что он делал раньше, было И. Я написал ИЛИ. - person Zoe; 27.10.2014

Вы хотите это:

NSString *className = @"YourParseClassName";
NSString *searchTerm = @"YourSearchTerm";
PFQuery *nameQuery = [PFQuery queryWithClassName:className];
[nameQuery whereKey:@"name" containsString:searchTerm];
PFQuery *cityQuery = [PFQuery queryWithClassName:className];
[cityQuery whereKey:@"city" containsString:searchTerm];
PFQuery *descriptionQuery = [PFQuery queryWithClassName:className];
[descriptionQuery whereKey:@"description" containsString:searchTerm];

PFQuery *allQuery = [PFQuery orQueryWithSubqueries:@[nameQuery, cityQuery, descriptionQuery]];
[allQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        NSLog(@"Found objects: %@", objects);
    } else {
        NSLog(@"Received error: %@", error);
    }
}];

Таким образом, вы создаете три отдельных запроса, а затем объединяете их в один больший запрос, чтобы вернуть все объекты сразу.

Но имейте в виду, что поиск Parse Regex довольно ограничен, и это может быть не самый масштабируемый вариант, если вы хотите выполнить много поиска. Для легкой работы или приложения со случайным поиском этого должно быть достаточно.

person Logan    schedule 27.10.2014