Parse Query переопределяет новый запрос поверх старого? - PullRequest
0 голосов
/ 12 мая 2019

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

В моем приложении пользователь может заблокировать других пользователей. Когда это будет сделано, я записываю объект «Блок» в базу данных, как это

Я блокирую другого пользователя:

ParseObject block = new ParseObject("Block");                                
block.put("owner",ParseUser.getCurrentUser());                                                
block.put("who",otherUser);

когда я получаю данные, я использую этот запрос.

    //I blocked him. dont sow me his data.
    ParseQuery<ParseObject> benblock= new ParseQuery<ParseObject>("Block");
    benblock.whereEqualTo("owner", ParseUser.getCurrentUser());

    //He blocked me dont show me his data.
    ParseQuery<ParseObject> oblock = new ParseQuery<ParseObject>("Block");                
    oblock.whereEqualTo("who",ParseUser.getCurrentUser());

    query.whereDoesNotMatchKeyInQuery("user","owner",oblock);  //This line doesn't work                
    query.whereDoesNotMatchKeyInQuery("user","who",benblock);  //But this line does.

Но когда я получаю данные, первый параметр запроса

query.whereDoesNotMatchKeyInQuery("user","owner",oblock); 

не работает только последний

 query.whereDoesNotMatchKeyInQuery("user","who",benblock);

работает. Как я могу это исправить.

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Я решил свою проблему, выполнив это.

В соответствии с этим (https://github.com/parse-community/Parse-SDK-Android/issues/211#issuecomment-150047052) Переопределение запроса Parse гдеDoesNotMatchKeyInQuery только для одного и того же ключа. Это означает, что я могу использовать этот параметр дважды в одном запросе, но не в одном и том же ключе. И я только что создал одно и то же значение с другим ключом.

Предыдущий мой объект был таким

    ParseObject object = new ParseObject("DataClass");
    object.put("post",post);
    object.put("user",user);

Теперь это выглядит так:

    ParseObject object = new ParseObject("DataClass");
    object.put("post",post);
    object.put("user",user);
    object.put("user2",user);//same user with the above one

И я делаю запрос так:

ParseQuery<ParseObject> benblock= new ParseQuery<ParseObject>("Block");
benblock.whereEqualTo("owner", ParseUser.getCurrentUser());

ParseQuery<ParseObject> oblock = new ParseQuery<ParseObject>("Block");
oblock.whereEqualTo("who",ParseUser.getCurrentUser());

hashtag.whereDoesNotMatchKeyInQuery("user","owner",oblock);
hashtag.whereDoesNotMatchKeyInQuery("user2","who",benblock);
0 голосов
/ 13 мая 2019

Вы можете добавить только один whereDoesNotMatchKeyInQuery для каждого ключа.Когда вы добавляете два одинаковых ограничения для одного и того же ключа, второе фактически перекрывает первое.Поэтому я предлагаю вам использовать Parse.Query.and, например:

//I blocked him. dont sow me his data.
ParseQuery<ParseObject> benblock = new ParseQuery<ParseObject>("Block");
benblock.whereEqualTo("owner", ParseUser.getCurrentUser());

//He blocked me dont show me his data.
ParseQuery<ParseObject> oblock = new ParseQuery<ParseObject>("Block");                
oblock.whereEqualTo("who", ParseUser.getCurrentUser());

ParseQuery<ParseObject> query1 = new ParseQuery<ParseObject>("YouDataClass");
query1.whereMatchesKeyInQuery("user","owner",oblock);  // you will need to create two queries
ParseQuery<ParseObject> query2 = new ParseQuery<ParseObject>("YouDataClass");
query2.whereMatchesKeyInQuery("user","who",benblock);

List<ParseQuery<ParseObject>> queries = new ArrayList<ParseQuery<ParseObject>>();
queries.add(query1);
queries.add(query2);
ParseQuery<ParseObject> orQuery = ParseQuery.or(queries);

ParseQuery<ParseObject> mainQuery = new ParseQuery<ParseObject>("YouDataClass");
mainQuery.whereDoesNotMatchQuery("objectId", orQuery);
...