Dicas / relações de uso – Parse.com JavaScript SDK

<dl>
Nota prévia: isso é direcionado ao SDK JavaScript do Parse, no entanto, pode ajudar se você estiver usando um SDK diferente como o Android. Portanto, se você está tendo problemas com Relações / Indicadores, dê uma lida!
</dl>


Edit: @tyaramis gerou uma grande questão de como fazer consultas multidimensionais no Parse, então fiz outro protocolo dedicado à sua pergunta: https://coderwall.com/p/-uzbrq/multi-dimensional-querying-parse- com-javascript-sdk

Quando comecei a usar o Parse, recebi a tarefa de criar um banco de dados para nossa primeira versão de nosso aplicativo móvel para DD buddy. Sabíamos quais informações precisávamos / queríamos na época, o truque era montar um banco de dados eficiente que não repetisse informações. Vindo de uma experiência em MySQL e não conhecendo nada além de PHPMyAdmin, eu estava totalmente ciente das relações entre tabelas de banco de dados ou, no caso do Parse, Classes. No entanto, não entendi como criaria um relacionamento entre as classes no Parse.

Quando comecei a mergulhar na documentação JS SDK do Parse, encontrei as seções sobre relacionamentos . A documentação faz um ótimo trabalho ao descrever as situações em que você gostaria de usar um Pointer, um Array (de Pointers ou Relações), um Relation ou uma Tabela de Junção. O que falta, porém, é um exemplo COMPLETO específico de como consultar esses ponteiros para receber informações úteis. Na verdade, é muito simples e você perceberá os enormes benefícios de usar ponteiros / relações quando este artigo estiver concluído!

Antes de começar, não tome nada disso como se eu dissesse que falta a documentação que o Parse fornece. Se você mergulhar na documentação específica do SDK, tudo é apresentado de uma maneira muito fácil de entender, e parte disso leva tempo e demora para ser entendido. Esta é uma das seções que tive problemas para implementar devido à falta de informações.


Estruturas de Classe

Primeiro, vamos configurar três classes no Parse. Usuários, postagens e comentários.

_Estrutura do usuário:

  • objectId
  • nome do usuário
  • senha
  • nome – string

Estrutura das postagens:

  • objectId
  • postName – string
  • postMsg – string
  • postAuthor – Pointer <_User> (Ponteiro para a classe de usuário)

Estrutura de comentários:

  • objectId
  • msg – string
  • post – Pointer <Posts> (Ponteiro para a classe de posts)
  • usuário – Ponteiro <_User> (Ponteiro para classe de usuário)

Agora, vamos pegar todas as postagens da classe Postagens e descobrir o nome do usuário que é seu autor.

var Posts = Parse.Object.extend("Posts");
var query = new Parse.Query(Posts);

O que acabamos de fazer é configurar uma consulta para nosso código JavaScript para conversar com nossa classe Posts.

query.include("postAuthor");

Essa linha de código é o que nos permite obter as informações da entrada do usuário para postAuthor“apontando” sem fazer outra consulta.

query.find().then(function(results){
/* Go Through Each Post */
var postsArray = new Array();
for(i in results){
/* Set obj to current post*/
var obj = results[i];
/* Get Post's Name */
var postName = obj.get("postName");
/* Get Post's Message */
var postMsg = obj.get("postMsg");
/* Get Post Author's Name */
var authorName = obj.get("postAuthor").get("name");

/* Let's Put the Post Information in an Array as an Object*/
postsArray
.push({
post
:{
name
: postName,
msg
: postMsg
},
author
: authorName
});
}
})

Então tudo o que fizemos foi, usando a consulta que criamos, reunir todos os posts e colocar suas informações em um objeto dentro do postsArray.

No entanto, se você olhar onde declaramos, authorNamepoderá ver como obtemos o nome do usuário / autor. Quando você usa o método em sua consulta, você pode usar na coluna incluída e, em seguida, outro para obter a coluna que deseja da classe para a qual o ponteiro está apontando. (Por exemplo, é a coluna que incluímos e é a coluna que queremos na classe de usuário. Então, podemos fazer e receberemos de volta o nome do usuário.).include().get().get()postAuthornameobj.get("postAuthor").get("name")


Inclui multidimensionais

Em alguns casos, pode ser necessário ir além de apenas incluir um ponteiro. Digamos que você esteja incluindo um ponteiro e, na entrada para a qual está apontando, haja outro ponteiro e você precise das informações para as quais o ponteiro de segundo nível está apontando. Como fazemos isso? Bem, vamos reunir todos os comentários na classe Comentários e, em seguida, tentaremos obter o nome do autor da postagem (não o nome de quem comentou).

Mesmos primeiros passos, vamos consultar a classe Comments desta vez.

var Comments= Parse.Object.extend("Comments");
var query = new Parse.Query(Comments);

A seguir, faremos outra inclusão. Primeiro, incluiremos a postcoluna na classe Comentários, porque podemos querer saber em qual postagem esse comentário está. Em seguida, faremos outro include para ter acesso ao postAuthor, usaremos a notação de ponto para acessar ponteiros multidimensionais. Se quiséssemos apenas o postAuthor, poderíamos deixar de fora o primeiro include, mas neste exemplo vamos pegar os dois.

/*Get the Post's Info*/
query
.include("post");
/*Get the Post Author's Info*/
query
.include("post.postAuthor");
/*Get the Comment's Author Info*/
query
.include("user");

Para recapitular a última inclusão, usamos a notação de ponto para incluir o ponteiro que está na postAuthorcoluna da classe Postagens que estamos acessando da postcoluna da classe Comentários. Em seguida, apenas consultamos as informações como fizemos nos Posts.

query.find().then(function(results){
/* Go Through Each Comment*/
var commentsArray = new Array();
for(i in results){
/* Set obj to current comment*/
var obj = results[i];
/* Get Post's Name */
var postName = obj.get("post").get("postName");
/* Get Post's Message */
var postMsg = obj.get("post").get("postMsg");
/* Get Post Author's Name */
var authorName = obj.get("post").get("postAuthor").get("name");
/* Get Comment's Message */
var commentMsg = obj.get("msg");
/* Get Comment's Author*/
var commentAuthor = obj.get("user").get("name");

/* Let's Put the Comment Information in an Array as an Object*/
commentsArray
.push({
post
:{
name
: postName,
msg
: postMsg
},
author
: authorName,
comment
: {
author
: commentAuthor,
msg
: commentMsg
}
});
}
})

Para encerrar, cobrimos tanto o padrão, incluindo para ponteiros, quanto os inclusões multidimensionais. Se você tiver alguma dúvida, entre em contato e eu tentarei o meu melhor para ajudar!

Felicidades!
Zach