Parse Server SDK — метод включения объекта не работает для извлечения всего объекта во flutter

#flutter #dart #parse-server #back4app

#flutter #dart #parse-server #back4app

Вопрос:

Я использовал parse server sdk в своем приложении для базы данных.

У меня на панели управления Back4App есть три класса, которые являются «_User», «Office», «Office_Members».

В классе Office_Members он содержит следующие столбцы,

  1. user_id (указатель на _User)
  2. office_id (указатель на Office)
  3. количество

Чтобы извлечь данные, включая указатель на _User, а также из Office_Members, я использую следующий код,

 QueryBuilder<ParseObject> parseQuery = QueryBuilder<ParseObject>(ParseObject("Office_Members"))
              ..whereEqualTo("office_id", ParseResponse_OfficeObject)
              ..includeObject(["user_id "]);

ParseResponse apiResponse = await parseQuery.query();
  

Вывод :

 Payload : [{"className":"Office_Members","objectId":"twpDY51PUK","createdAt":"2020-08-14T09:58:59.775Z","updatedAt":"2020-08-14T09:58:59.775Z","office_id":{"__type":"Pointer","className":"Office","objectId":"4dkfSMrwBI"},"user_id":{"__type":"Pointer","className":"_User","objectId":"Hx5xJ5ABxG"},"count":1}]
  

В моем ответе на полезную нагрузку я не получаю полный ответ на указатель user_id.

Итак, кто-нибудь может мне помочь, что я могу делать неправильно?

Спасибо.

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

1. Я вижу пустое место в "user_id " не могли бы вы, пожалуйста, попытаться обрезать эту строку?

2. я уже удалил его

3. Таким образом, ваша проблема, вероятно, связана с разрешением. Вероятно, у вас нет общедоступного разрешения на чтение для этого пользовательского объекта (либо из-за CLP для класса _User, либо из-за ACL для этого конкретного объекта). По соображениям безопасности рекомендуется, чтобы ваш пользовательский класс не был общедоступным, поэтому лучшим решением было бы использовать облачный код.

Ответ №1:

Данные должны быть включены. Функция протоколирования просто не печатает данные указателей.

Ответ №2:

Данные должны быть включены. Функция печати не печатает данные указателей.

Вы можете распечатать его напрямую для целей тестирования, например.

response.results[0].get('user_id').get('name')

Вычислительное выражение, например.


В вашей модели вы можете получить доступ таким же образом, например

Модель вызова

 if(response.success){
  return response.results.map((p) => Example.fromParse(p)).toList();
} else {
  throw ParseErrors.getDescription(response.error.code);
}
  

Модель

 import 'package:parse_server_sdk/parse_server_sdk.dart';

class Example {

  Example({this.id, this.name});

  Example.fromParse(ParseObject parseObject) :
        id = parseObject.objectId,
        name = parseObject.get('user_id').get('name');

  final String id;
  final String name ;


  @override
  String toString() {
    return 'Example{id: $id, name: $name}';
  }
}
  

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

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

Ответ №3:

Почему бы просто не использовать облачный код? Я не слишком знаком с flutter, но я могу предложить вам это альтернативное решение. Напишите функцию, подобную этой.

     Parse.Cloud.define("fetchMemberAndUser", async (request) => {
        //Pass in ParseResponse_OfficeObject ID as parameter
        var objectId = request.params.id;
    
        //Now do a simple get query
        var query = new Parse.Query(Parse.Object.extend("Office_Members"));
        //Using .includes to get the user profile object
        query.include("user_id");
        //This will return Office_Memebers Object along with user profile
        return query.get(objectId,{useMasterKey:true});
    }
  

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

1. Я не хочу отправлять запросы curl. Также существует функция ParseCloudFunction. Но в любом случае нет способа передать метод includeObject() в запрос ParseCloudFunction.

2. «Но в любом случае нет способа передать метод includeObject() в запрос ParseCloudFunction» Не могли бы вы объяснить это немного подробнее? Я не совсем вас понимаю.