2014-09-13 4 views
0

Я использую Parse.com для своей базы данных приложений для Android.Parse.com Запрос на значение указателя

Короче говоря, я запрашиваю класс A, который имеет поле, указывающее на класс B. Если я запрашиваю класс A и включаю класс B, в любом случае у меня может быть фильтр запросов и/или сортировка по полю в классе B?

Я больше знаком с db типа sql, что может стать очевидным из моего описания. В parse у меня есть таблица для людей, приглашенных в игру «gameInvitees» с некоторыми метаданными, например, когда они были приглашены и их статус rsvp. Затем отдельная таблица с играми «gameInstances». В «gameInvitees» есть указатель на игру, в которую они приглашены, и приглашенный пользователь синтаксического анализа.

Моя проблема заключается в том, что я пытаюсь запросить таблицу «gameInvitees», чтобы найти текущих пользователей, приглашенных в игру на основе игрового времени, которое находится в таблице «gameInstance».

Мой текущий код выглядит примерно так:

Calendar cal = Calendar.getInstance(); 
    cal.setTime(new Date()); 
    cal.add(Calendar.HOUR, -1); 
    final Date oneHourBack = cal.getTime(); 


    // get games that the current user is invited to 
    ParseQuery<GamePhaseInvitees> inviteeQuery = ParseQuery.getQuery("gameInvitees"); 
    inviteeQuery.whereEqualTo("inviteeAccount", ParseUser.getCurrentUser()); // current user is invited 
    inviteeQuery.include("GameInstance"); 
    // inviteeQuery.whereGreaterThanOrEqualTo("GameInstance.GameTime", oneHourBack); // game is one hour back (but, this doesn't work) 


    inviteeQuery.findInBackground(new FindCallback<GamePhaseInvitees>() { 
     public void done(List<GamePhaseInvitees> gamesInvitedToList, ParseException e) { 
      if (e == null) { 

      } else { 
      } 

     } 
    }); 

Этот код немного упрощен, чтобы объяснить проблему. В основном мне нужно выяснить, что я могу сделать с этой прокомментированной строкой, чтобы запросить поле, которое связано с указателем. Это возможно? Существуют ли для этого какие-то чистые решения?

+0

Как выглядит ваш журнал как ваша ошибка? Одна потенциальная проблема, которую я могу себе представить, заключается в том, что «Calendar.getInstance» создается в вашем приложении, а не в базе данных, поэтому в базе данных может быть несколько другое время (возможно, на несколько миллисекунд). – erad

+0

Я думаю, проблема связана с прокомментированной линией. Когда я раскомментирую его, я получаю: «Точечная нотация может использоваться только для объектов». Я пробовал это с помощью только «gameTime», но, который не возвращает никаких результатов, которые я предполагаю без точечной нотации, условие применяется к неправильной таблице. Поэтому я просто пытаюсь выяснить, как я могу сделать условный запрос для объекта, который прикреплен указателем. Это возможно? Таблица базы данных хороша, хотя –

ответ

1

Вот возможное решение:

Создание ParseObject от типа вашей таблицы: ParseObject time = new ParseObject("Date"); Затем получить ParseObject из результата: time = result.getParseObject(pointer_field);

Теперь вы можете вытащить из time любого поля, что он имеет как вы это делали, например: time.getString("some_field").

Возможно, вам также необходимо будет указать: query.include("pointer_field").

+0

Спасибо за ответ. Я не думаю, что я был совершенно ясен в своей проблеме. Короче говоря, я запрашиваю класс A, который имеет поле, указывающее на класс B. Если я запрашиваю класс A и включаю класс B, в любом случае у меня может быть фильтр запросов и/или сортировка по полю в классе B? Ваш ответ на самом деле довольно близок к тому, что я сейчас делаю при выполнении запроса, а затем получаю поле и обрабатываю фильтр вручную, но это просто кажется неэффективным, тем более, что мне нужно выкинуть большинство возвращенных результатов. –

0

Согласно Разбор сообщества:

Вместо точечной нотации в whereKey :, вы бы использовать whereKey: matchesKey:: или получении заявки whereKey: matchesQuery :.