Синтаксический анализ: включение вложенных указателей в запрос

#javascript #parse-platform

#javascript #синтаксический анализ-платформа

Вопрос:

В моем приложении есть следующая структура:

 MessageRecipients -> Message -> User 
                     Message -> Activity
  

где -> представляет указатель. Я выделил таблицы сообщений и получателей сообщений, потому что мне нужно зафиксировать, было ли сообщение прочитано каждым получателем.

Запрос, который я хочу выполнить, — это найти все сообщения для получателя. Итак, мне нужно включить сообщение в запрос MessageRecipients, но я также хотел бы включить вложенные объекты User и Activity.

 var MessageRecipient = new Parse.Query('MessageRecipient');
messageQuery.equalTo('recipient', query.recipient);
messageQuery.include('message');
  

Сообщение возвращается без заполнения активности и отправителя. Я попытался вызвать messageQuery.include(‘activity’), но это не сработало, поскольку activity находится не в правильной таблице.

Есть ли способ выполнить этот запрос или вам нужно выполнять отдельные запросы для вложенных объектов?

Ответ №1:

Вам также необходимо включить эти вложенные объекты:

 messageQuery.include('message');
messageQuery.include('message.user');  // if user is the column name
messageQuery.include('message.activity'); // if activity is the column name
  

Комментарии:

1. Просто полезный совет для всех, кто читает этот ответ — даже если вы можете включать вложенные объекты, используя точечную нотацию, как описано в этом правильном ответе, это не означает, что именно так вы получаете доступ к объекту в вашем адаптере. Вам придется разделить доступ следующим образом: ParseObject activity = object.getParseObject(«сообщение»).getParseObject(«активность»); если вы попробуете ParseObject activity = object.getParseObject(«сообщение.активность»); if выдаст вам исключение NullPointerException.

2. Допустим, я делаю запрос к MessageRecipients и хочу, чтобы этот запрос имел порядок возрастания от класса Activity (createdAt), есть ли какой-либо способ сделать это?

3. Нет, вы можете упорядочивать запрос только на основе столбцов в базовом классе. Похоже, вам придется выполнить некоторую сортировку на стороне клиента.

4. @MaxWorg большое спасибо! Я думаю, что это должно быть включено в конце ответа. Столкнулся с той же проблемой на Android 🙂

5. Подсказка для includeAll() в JS. Насколько я пытался, это не работает с includeAll(), но если вы включите, как в примере, это сработает

Ответ №2:

Вы также можете добиться этого в одной строке:

 messageQuery.include( ["message", "message.user", "message.activity"] );
  

Комментарии:

1. отличный момент! подобные детали никогда не упоминаются в документах Parse!