Parse.com Получить объект указателя внутри массива пользовательских объектов
У меня есть столбец как массив, где я храню данные с указателем на сущность _User:
[{
"score": 500,
"user":{
"__type":"Pointer",
"className":"_User",
"objectId":"b80TtUfOwH"
}
}, {
"score": 1000,
"user":{
"__type":"Pointer",
"className":"_User",
"objectId":"b80TtRdaw"
}
}]
Я хочу получить весь массив в виде включения с заполненным пользовательским свойством (таблица - это Team, а members - это столбец Array):
var query = new Parse.Query("Team");
query.include("members");
query.include("members.user");
Я пробовал эти включения, и пользователь обнаруживается, но не заполнен.
Можно ли сделать это одним запросом? Как это будет?
Я хочу использовать Array Column (без указателя массива), потому что он не будет больше 10, и я хочу только один запрос.
2 ответа
Если то, что вы пробовали, не работает, то я ожидаю, что это невозможно.
Альтернатива состоит в том, чтобы сделать это в облачном коде, где вы можете быстро извлечь весь вложенный контент и отформатировать его в одном ответе.
РЕДАКТИРОВАТЬ теперь, когда я понимаю проблему... Объекты в массиве не указатели. Содержать указатель - это не то же самое, что указатель. Не умная формулировка include
будет работать, чтобы получить пользователя.
Что делать? У команд есть участники, которые являются людьми. Это довольно универсальный факт, поэтому я бы предложил изменить свойство members, чтобы оно представляло собой массив фактических указателей. С этим, это предложение из моего первого редактирования будет работать, хотя, я думаю, вы уже знали это...
var query = new Parse.Query("Team");
query.include("members");
query.find().then(function(teams) {
// teams will contain fully fetched users in the members property
});
Но где эти другие данные в объектах массива должны идти? Это зависит от значения этих данных. Действительно ли данные относятся к отношениям между командой и участником? (Хороший пример чего-то, что могло бы быть - контракт профессионального игрока с командой). "Оценка" не звучит как такая вещь. Я бы нашел другое место, чтобы поместить его (как в объекте, который записывает игры).
В общем, когда ClassA относится к ClassB (Team -> User for you), атрибуты имеют три места: в каждом классе и в отношениях между ними. Если атрибут действительно должен принадлежать отношению, то вам понадобится ClassC, который будет нести этот атрибут.
Еще одна вещь: даже в случае атрибута, который действительно принадлежит отношению, вы часто можете ввести его в целевой класс (ClassB). Например, контракт профессионального игрока может относиться к его / ее отношениям со своей командой, но если они заключают контракт только с одной командой за раз, вы можете немного обмануть и прикрепить это к игроку.