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 \<font color="#2166ae">relaciones\</font> , que es la más rápida en tiempo de creación y consulta usaremos esto en esta guía la segunda es usar \<font color="#2166ae">arreglos\</font> de \<font color="#2166ae">punteros\</font> que pueden llevar a tiempos de consulta lentos dependiendo de su tamaño la tercera es usar \<font color="#2166ae">jointable\</font> donde la idea proviene de bases de datos clásicas cuando hay una relación muchos a muchos, combinamos cada \<font color="#2166ae">objectid\</font> o \<font color="#2166ae">puntero\</font> 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 \<font color="#2166ae">relación muchos a muchos\</font> en una aplicación de registro de libros en flutter usando el \<font color="#2166ae">relaciones\</font> 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 https //code visualstudio com/ (con plugins https //docs flutter dev/get started/editor 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 \<font color="#2166ae">relación uno a muchos\</font> 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 \<font color="#2166ae">dosavebook\</font> en el archivo \<font color="#2166ae">main dart\</font> , y reemplázala con el código a continuación dentro de la \<font color="#2166ae">future\<void\> dosavebook()\</font> 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 \<font color="#2166ae">libro\</font> clase con el comando \<font color="#2166ae">parseobject('libro')\</font> 2 usa el \<font color="#2166ae">conjunto\</font> función para establecer los campos de este objeto 2 1 \<font color="#2166ae">título\</font> es un atributo de texto que recibe valor del controlador de texto 2 2 \<font color="#2166ae">género\</font> recibe el valor al definir un \<font color="#2166ae">parseobject\</font> con el \<font color="#2166ae">objectid\</font> del \<font color="#2166ae">género\</font> ( parse convertirá a puntero al guardar ) 2 3 \<font color="#2166ae">editor\</font> recibe el valor al definir un \<font color="#2166ae">parseobject\</font> con el \<font color="#2166ae">objectid\</font> del \<font color="#2166ae">editor\</font> ( tenga en cuenta que podemos especificar para parse que queremos guardar como un \<font color="#2166ae">puntero\</font> usando el \<font color="#2166ae">topointer()\</font> método ) 2 4 \<font color="#2166ae">autores\</font> llamamos al \<font color="#2166ae">addrelation\</font> método de \<font color="#2166ae">parseobject\</font> , enviando una lista de \<font color="#2166ae">parseobject\</font> con el \<font color="#2166ae">objectid\</font> de los \<font color="#2166ae">autores\</font> }]} 3 llama a la \<font color="#2166ae">guardar\</font> función en \<font color="#2166ae">parseobject\</font> , 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 \<font color="#2166ae">dosavebook()\</font> 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 \<font color="#2166ae">agregar libro\</font> botón completa la información del libro con los autores haz clic en \<font color="#2166ae">guardar libro\</font> botón para confirmar que el nuevo objeto se guarda en la base de datos con relaciones, puedes acceder al \<font color="#2166ae">back4app dashboard\</font> y acceder a la \<font color="#2166ae">clase de libro\</font> 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 \<font color="#2166ae">includeobject\</font> método en nuestro ejemplo, queremos devolver los libros, con información de género y editoriales busca la función \<font color="#2166ae">getbookdetail\</font> en el archivo \<font color="#2166ae">main dart\</font> , luego reemplaza el código a continuación dentro de \<font color="#2166ae">getbookdetail(parseobject book)\</font> 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 \<font color="#2166ae">parsequery\</font> objeto para \<font color="#2166ae">libro\</font> clase inserte una condición en la consulta, para buscar \<font color="#2166ae">libros\</font> donde \<font color="#2166ae">objectid\</font> el campo es igual \<font color="#2166ae">objectid\</font> 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 \<font color="#2166ae">query()\</font> método si las operaciones tienen éxito, el objeto en \<font color="#2166ae">libro\</font> 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 \<font color="#2166ae">bookgenre = book get\<parseobject\>('genre') get\<string\>('name');\</font> 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 \<font color="#2166ae">parsequery\</font> objeto para la clase \<font color="#2166ae">authors\</font> inserta una condición en la consulta, usando el operador \<font color="#2166ae">whererelatedto\</font> para buscar la relación de \<font color="#2166ae">authors\</font> con \<font color="#2166ae">book\</font> , donde \<font color="#2166ae">book\</font> es igual a \<font color="#2166ae">objectid\</font> del libro seleccionado realiza un método de búsqueda de la consulta usando el método \<font color="#2166ae">query()\</font> si las operaciones tienen éxito, se devolverá el objeto en \<font color="#2166ae">book\</font> 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 \<font color="#2166ae">list publisher/book\</font> 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 \<font color="#2166ae">flutter\</font>