#flutter #dart #parse-server #back4app
#flutter #dart #parse-server #back4app
Вопрос:
Я использовал parse server sdk в своем приложении для базы данных.
У меня на панели управления Back4App есть три класса, которые являются «_User», «Office», «Office_Members».
В классе Office_Members он содержит следующие столбцы,
- user_id (указатель на _User)
- office_id (указатель на Office)
- количество
Чтобы извлечь данные, включая указатель на _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» Не могли бы вы объяснить это немного подробнее? Я не совсем вас понимаю.