Flutter
...
Data Objects
Implementando Relação Muitos-para-Muitos em Flutter com Parse
11 min
relação muitos para muitos no flutter introdução no guia anterior, aprendemos como usar relações um para muitos e continuaremos com nosso projeto neste guia, focaremos na relação mais comum muitos para muitos existem três maneiras de criar uma relação muitos para muitos no parse a primeira é usando o parse relações relações , que é a mais rápida em tempo de criação e consulta usaremos isso neste guia a segunda é usando arrays arrays de pointers pointers que podem levar a tempos de consulta lentos dependendo de seu tamanho a terceira é usando jointable jointable onde a ideia vem de bancos de dados clássicos quando há uma relação muitos para muitos, combinamos cada objectid objectid ou pointer pointer de ambos os lados juntos para construir uma nova tabela separada na qual a relação é rastreada neste guia, você implementará uma relação muitos para muitos relação muitos para muitos em um app de registro de livros flutter usando o parse relações relações você aprenderá como criar e consultar relações de dados muitos para muitos e como realizar consultas retornando dados de objetos relacionados, usando back4app e o sdk flutter pré requisitos android studio https //developer android com/studio ou vs code instalado (com plugins dart e flutter) nota o aplicativo flutter criado no guia anterior complete o guia anterior para que você possa ter uma melhor compreensão da relação um para muitos relação um para muitos classe um dispositivo (ou dispositivo virtual) executando android ou ios 1 execute o modelo de aplicativo de livro se você não completou o guia anterior, pode clonar e executar o completo aplicativo flutter de livro https //github com/templates back4app/flutter associations projeto do nosso repositório você também pode dar uma olhada no guia anterior https //www back4app com/docs/flutter/parse sdk/data objects/%7bsite baseurl%7d%7d//flutter/parse sdk/data objects/flutter one to many relationship para entender melhor o modelo de aplicativo abaixo você pode encontrar uma representação visual do modelo de dados de registro de livro 2 salvar um objeto livro e seu autor abra o projeto flutter do guia anterior relação um para muitos no flutter https //www back4app com/docs//flutter/parse sdk/data objects/flutter one to many relationship procure pela função dosavebook dosavebook no arquivo main dart main dart , e substitua pelo código abaixo dentro da future\<void> dosavebook() future\<void> dosavebook() função abaixo esta função irá criar um novo livro no armazenamento de dados do back4app com relações 1 final book = parseobject('book') 2 set('title', controllertitle text trim()) 3 set('year', int parse(controlleryear text trim())) 4 //the objectid will be converted to a pointer on the save() method 5 set('genre', parseobject('genre') objectid = genre objectid) 6 //you can also convert to a pointer object before the saving using the topointer() method 7 set('publisher', 8 (parseobject('publisher') objectid = publisher objectid) topointer()) 9 //saving a list of authors for the book 10 addrelation( 11 'authors', 12 authors 13 map((o) => parseobject('author') objectid = o objectid) 14 tolist()); 15 16 await book save(); para construir esta função, siga estes passos 1\ crie uma nova instância da parse livro livro classe com o comando parseobject('livro') parseobject('livro') 2 use o conjunto conjunto função para definir os campos para este objeto 2 1 título título é um atributo de texto que recebe valor do controlador de texto 2 2 gênero gênero recebe o valor definindo um parseobject parseobject com o objectid objectid do gênero gênero ( parse irá converter para ponteiro ao salvar ) 2 3 editor editor recebe o valor definindo um parseobject parseobject com o objectid objectid do editor editor ( observe que podemos especificar para o parse que queremos salvar como um ponteiro ponteiro usando o topointer() topointer() método ) 2 4 autores autores chamamos o addrelation addrelation método de parseobject parseobject , enviando uma lista de parseobject parseobject com o objectid objectid dos autores autores 3 chame o salvar salvar função em parseobject parseobject , que efetivamente registrará o objeto no seu banco de dados no painel do back4app execute o app e teste a nova dosavebook() dosavebook() função primeiro, acesse o painel e exclua os livros que foram registrados anteriormente no guia anterior clique no adicionar livro adicionar livro botão preencha as informações do livro com os autores clique em salvar livro salvar livro botão para confirmar que o novo objeto está salvo no banco de dados com relações, você pode acessar o painel do back4app painel do back4app e acessar a classe livro classe livro clicar no valor do ponteiro/relação do objeto no seu painel o levará à entrada do objeto referenciado pode parecer um recurso inofensivo, mas isso torna a depuração e o rastreamento de erros muito mais rápidos do que procurá lo manualmente 3 consultar os detalhes do livro com relações esta função irá consultar os detalhes do livro no banco de dados do back4app, retornando dados de relacionamento em algumas situações, você pode querer retornar múltiplos tipos de objetos relacionados em uma única consulta você pode fazer isso com o includeobject includeobject método no nosso exemplo, queremos retornar os livros, com informações de gênero e editoras procure a função getbookdetail getbookdetail no arquivo main dart main dart , então substitua o código abaixo dentro da getbookdetail(parseobject book) getbookdetail(parseobject book) função 1 querybuilder\<parseobject> querybook = 2 querybuilder\<parseobject>(parseobject('book')) 3 whereequalto('objectid', book objectid) 4 includeobject(\['publisher', 'genre']); 5 6 final parseresponse responsebook = await querybook query(); 7 8 if (responsebook success && responsebook results != null) { 9 final book = (responsebook results first) as parseobject; 10 booktitle = book get\<string>('title'); 11 bookyear = book get\<int>('year'); 12 bookgenre = book get\<parseobject>('genre') get\<string>('name'); 13 bookpublisher = book get\<parseobject>('publisher') get\<string>('name'); 14 loadeddata = true; 15 } 16 17 querybuilder\<parseobject> queryauthors = 18 querybuilder\<parseobject>(parseobject('author')) 19 whererelatedto('authors', 'book', book objectid); 20 21 final parseresponse responseauthors = await queryauthors query(); 22 23 if (responseauthors success && responseauthors results != null) { 24 bookauthors = responseauthors results 25 map((e) => (e as parseobject) get\<string>('name')) 26 tolist(); 27 } para construir esta função, siga estas etapas crie uma instância de parsequery parsequery objeto para livro livro classe insira uma condição na consulta, para buscar livros livros onde objectid objectid campo é igual a objectid objectid do livro selecionado usamos o método includeobject, informando os campos dos ponteiros que queremos retornar os dados na mesma consulta gênero e editora você também pode fazer includeobject de múltiplos níveis usando notação de ponto exemplo ` includeobject(\[‘post’, ‘post authors’]); faça um método de busca da consulta usando query() query() método se as operações forem bem sucedidas, o objeto em livro livro será retornado usamos o método get para recuperar os dados para campos que são ponteiros, primeiro precisaremos recuperar o ponteiro, depois obter seus dados exemplo bookgenre = book get\<parseobject>('genre') get\<string>('name'); bookgenre = book get\<parseobject>('genre') get\<string>('name'); na segunda etapa do processamento, precisamos recuperar os autores associados ao livro para construir esta função, siga estas etapas crie uma instância de parsequery parsequery objeto para a classe authors authors insira uma condição na consulta, usando o operador whererelatedto whererelatedto para buscar a relação de authors authors com book book , onde book book é igual a objectid objectid do livro selecionado use o método de busca da consulta usando o método query() query() se as operações forem bem sucedidas, o objeto em book book será retornado usamos o método get para recuperar os dados execute o app e teste a nova consulta primeiro, clique no botão list publisher/book list publisher/book selecione um livro da lista a próxima tela exibirá os dados dos livros e suas relações está feito! neste ponto, você aprendeu como criar e consultar relações muitos para muitos e como realizar consultas retornando dados de objetos relacionados no parse em flutter flutter