Flutter
...
Data Objects
Implementación de Relaciones N:N en Parse para Flutter
11 min
relación muchos a muchos en flutter introducción en la guía anterior, aprendimos cómo usar relaciones uno a muchos y continuaremos con nuestro proyecto en esta guía, nos centraremos en la relación más común muchos a muchos hay tres formas de crear una relación muchos a muchos en parse la primera es usar el relaciones relaciones , que es la más rápida en tiempo de creación y consulta usaremos esto en esta guía la segunda es usar arreglos arreglos de punteros punteros que pueden llevar a tiempos de consulta lentos dependiendo de su tamaño la tercera es usar jointable jointable donde la idea proviene de bases de datos clásicas cuando hay una relación muchos a muchos, combinamos cada objectid objectid o puntero puntero de ambos lados juntos para construir una nueva tabla separada en la que se rastrea la relación en esta guía implementarás una relación muchos a muchos relación muchos a muchos en una aplicación de registro de libros en flutter usando el relaciones relaciones aprenderás cómo crear y consultar relaciones de datos muchos a muchos y cómo realizar consultas que devuelvan datos de objetos relacionados, utilizando back4app y el sdk de flutter requisitos previos android studio https //developer android com/studio o vs code instalado (con plugins dart y flutter) nota la aplicación flutter creada en la guía anterior completa la guía anterior para que puedas tener una mejor comprensión de la relación uno a muchos relación uno a muchos clase un dispositivo (o dispositivo virtual) que ejecute android o ios 1 ejecutar la plantilla de la aplicación de libros si no has completado la guía anterior, puedes clonar y ejecutar el completo proyecto de aplicación de libros flutter https //github com/templates back4app/flutter associations desde nuestro repositorio también puedes echar un vistazo a la guía 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 mejor la plantilla de la aplicación a continuación, puedes encontrar una representación visual del modelo de datos de registro de libros 2 guarda un objeto libro y su autor abre el proyecto de flutter de la guía anterior relación uno a muchos en flutter https //www back4app com/docs//flutter/parse sdk/data objects/flutter one to many relationship busca la función dosavebook dosavebook en el archivo main dart main dart , y reemplázala con el código a continuación dentro de la future\<void> dosavebook() future\<void> dosavebook() función a continuación esta función creará un nuevo libro en el almacén de datos de back4app con relaciones 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 función, sigue estos pasos 1\ crea una nueva instancia de la parse libro libro clase con el comando parseobject('libro') parseobject('libro') 2 usa el conjunto conjunto función para establecer los campos de este objeto 2 1 título título es un atributo de texto que recibe valor del controlador de texto 2 2 género género recibe el valor al definir un parseobject parseobject con el objectid objectid del género género ( parse convertirá a puntero al guardar ) 2 3 editor editor recibe el valor al definir un parseobject parseobject con el objectid objectid del editor editor ( tenga en cuenta que podemos especificar para parse que queremos guardar como un puntero puntero usando el topointer() topointer() método ) 2 4 autores autores llamamos al addrelation addrelation método de parseobject parseobject , enviando una lista de parseobject parseobject con el objectid objectid de los autores autores }]} 3 llama a la guardar guardar función en parseobject parseobject , que registrará efectivamente el objeto en tu base de datos en el panel de control de back4app ejecuta la aplicación y prueba la nueva dosavebook() dosavebook() función primero, accede al panel de control y elimina los libros que fueron registrados anteriormente en la guía anterior haz clic en el agregar libro agregar libro botón completa la información del libro con los autores haz clic en guardar libro guardar libro botón para confirmar que el nuevo objeto se guarda en la base de datos con relaciones, puedes acceder al back4app dashboard back4app dashboard y acceder a la clase de libro clase de libro hacer clic en el valor del puntero/relación del objeto en tu panel te llevará a la entrada del objeto referenciado puede parecer una función inofensiva, pero esto hace que la depuración y el rastreo de errores sean mucho más rápidos que buscarlos manualmente 3 consultar los detalles del libro con relaciones esta función consultará los detalles del libro en la base de datos de back4app, devolviendo datos de relación en algunas situaciones, deseas devolver múltiples tipos de objetos relacionados en una sola consulta puedes hacer esto con el includeobject includeobject método en nuestro ejemplo, queremos devolver los libros, con información de género y editoriales busca la función getbookdetail getbookdetail en el archivo main dart main dart , luego reemplaza el código a continuación dentro de getbookdetail(parseobject book) getbookdetail(parseobject book) función 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 función, sigue estos pasos cree una instancia de parsequery parsequery objeto para libro libro clase inserte una condición en la consulta, para buscar libros libros donde objectid objectid el campo es igual objectid objectid del libro seleccionado usamos el método includeobject, informando los campos de los punteros que queremos devolver los datos en la misma consulta género y editor también puede hacer includeobject de múltiples niveles usando notación de punto ejemplo ` includeobject(\[‘post’, ‘post authors’]); haga un método de búsqueda de consulta usando query() query() método si las operaciones tienen éxito, el objeto en libro libro será devuelto usamos el método get para recuperar los datos para los campos que son punteros, primero necesitaremos recuperar el puntero, luego obtener sus datos ejemplo bookgenre = book get\<parseobject>('genre') get\<string>('name'); bookgenre = book get\<parseobject>('genre') get\<string>('name'); en la segunda etapa del procesamiento, necesitamos recuperar los autores asociados con el libro para construir esta función, sigue estos pasos crea una instancia de parsequery parsequery objeto para la clase authors authors inserta una condición en la consulta, usando el operador whererelatedto whererelatedto para buscar la relación de authors authors con book book , donde book book es igual a objectid objectid del libro seleccionado realiza un método de búsqueda de la consulta usando el método query() query() si las operaciones tienen éxito, se devolverá el objeto en book book usamos el método get para recuperar los datos ejecuta la aplicación y prueba la nueva consulta primero, haz clic en el botón list publisher/book list publisher/book selecciona un libro de la lista la siguiente pantalla mostrará los datos de los libros y sus relaciones ¡está hecho! en este punto, aprendiste cómo crear y consultar relaciones de muchos a muchos y cómo realizar consultas que devuelven datos de objetos relacionados en parse en flutter flutter