React Native
...
Data objects
N:N Relationship
10 min
relation plusieurs à plusieurs introduction au cœur de nombreux backends, vous trouverez la capacité de stocker des données en utilisant parse, vous pouvez stocker des objets de données établissant des relations entre eux les relations de données standardisent la manière dont chaque objet de données est lié ou associé à d'autres cela peut vous donner un pouvoir supplémentaire lors de la construction et de l'exécution de requêtes complexes il existe trois principaux types de relations un à plusieurs un à plusieurs , où un objet peut être lié à plusieurs autres objets; un à un un à un , établissant des relations directes entre deux objets et seulement eux; plusieurs à plusieurs plusieurs à plusieurs , qui peut créer de nombreuses relations complexes entre de nombreux objets dans ce guide, nous nous concentrerons sur les relations plusieurs à plusieurs ces relations sont courantes dans les applications contenant du contenu rédigé, comme les blogs et les fils d'actualités, car les auteurs et les étiquettes de catégorie peuvent être interchangeables et optimisés pour des requêtes rapides les backends de stockage de données exigeront généralement des déclarations explicites de ces associations et même exigeront que vous créiez, par vous même, des tables relationnelles pour gérer leur jonction parse le fait automatiquement pour vous, éliminant toute possibilité d'erreurs lors de la construction de vos relations de données et accélérant votre processus de modélisation d'application il existe deux façons de créer une relation plusieurs à plusieurs dans parse la première utilise les parse object parse object relations, qui est la plus rapide en termes de création et de temps de requête la seconde utilise des tableaux, ce qui peut entraîner des temps de requête lents en fonction de leur taille en raison de ce problème de performance, nous utiliserons uniquement des exemples de relations à partir de maintenant dans ce guide, vous allez implémenter une application d'enregistrement de livres react native qui contient les trois principaux types d'associations de données vous apprendrez à créer et à interroger des relations de données plusieurs à plusieurs en utilisant votre back4app et react native à tout moment, vous pouvez accéder à ce projet via nos dépôts github pour consulter les styles et le code complet https //github com/templates back4app/react native js associations https //github com/templates back4app/react native ts associations prérequis pour compléter ce tutoriel, vous aurez besoin de une application react native créée et https //www back4app com/docs/react native/parse sdk/react native sdk si vous souhaitez tester/utiliser la mise en page de l'écran fournie par ce guide, vous devez configurer le react native paper react native paper https //github com/callstack/react native paper objectif pour effectuer et démontrer des relations de base de données plusieurs à plusieurs dans react native en utilisant parse dans un scénario réaliste 1 comprendre la classe book puisque dans ce guide nous allons utiliser un exemple d'application d'enregistrement de livres, vous devez d'abord comprendre comment les relations d'objet sont disposées dans cette base de données la principale classe d'objet que vous utiliserez est la livre livre classe, qui stockera chaque entrée de livre dans l'enregistrement voici les quatre autres classes d'objet éditeur éditeur nom de l'éditeur du livre, relation un à plusieurs avec livre livre genre genre genre du livre, relation un à plusieurs avec livre livre notez que pour cet exemple, nous considérerons qu'un livre ne peut avoir qu'un seul genre ; auteur auteur auteur du livre, relation plusieurs à plusieurs avec livre livre , puisque un livre peut avoir plus d'un auteur et un auteur peut avoir plus d'un livre également ; isdb isdb numéro d'identification isdb du livre, relation un à un avec livre livre , puisque ce numéro est unique pour chaque livre voici une représentation visuelle de ces tables de base de données pour simplifier, nous allons supposer que chaque classe d'objet a uniquement un type de chaîne nom nom attribut ( titre titre pour le livre livre ), en dehors de tout attribut relationnel supplémentaire 2 création de relations un à plusieurs avant de passer à cette étape, nous vous recommandons de cloner et d'exécuter l'exemple d'application de la bibliothèque react native ( https //github com/templates back4app/react native js associations , https //github com/templates back4app/react native ts associations ) cette application a deux écrans principaux l'un responsable de l'affichage des livres enregistrés et l'autre de la création de nouveaux livres dans le formulaire d'enregistrement des livres, il y a des liens directs vers les autres objets liés, donc lorsque l'utilisateur choisit une option d'éditeur ou de genre, les champs du formulaire contiendront l'intégralité de l'instance parse object parse object examinons la méthode de création de livre qui est appelée lors de la soumission de ce formulaire javascript 1 const createbook = async function () { 2 try { 3 // these values come from state variables linked to 4 // the screen form fields, retrieving the user choices 5 // as a complete parse object, when applicable; 6 const booktitlevalue = booktitle; 7 const bookisbdvalue = bookisbd; 8 // for example, bookpublisher holds the value from 9 // radiobutton group field with its options being every 10 // publisher parse object instance saved on server, which is 11 // queried on screen load via useeffect 12 const bookpublisherobject = bookpublisher; 13 const bookgenreobject = bookgenre; 14 // bookauthors can be an array of parse objects, since the book 15 // may have more than one author 16 const bookauthorsobjects = bookauthors; 17	 18 // creates a new parse object instance 19 let book = new parse object('book'); 20	 21 // set data to parse object 22 // simple title field 23 book set('title', booktitlevalue); 24	 25 // 1 1 relation, need to check for uniqueness of value before creating a new isbd object 26 let isbdquery = new parse query('isbd'); 27 isbdquery equalto('name', bookisbdvalue); 28 let isbdqueryresult = await isbdquery first(); 29 if (isbdqueryresult !== null && isbdqueryresult !== undefined) { 30 // if first returns a valid object instance, it means that there 31 // is at least one instance of isbd with the informed value 32 alert alert( 33 'error!', 34 'there is already an isbd instance with this value!', 35 ); 36 return false; 37 } else { 38 // create a new isbd object instance to create a one to one relation on saving 39 let isbd = new parse object('isbd'); 40 isbd set('name', bookisbdvalue); 41 isbd = await isbd save(); 42 // set the new object to the new book object isbd field 43 book set('isbd', isbd); 44 } 45	 46 // one to many relations can be set in two ways 47 // add direct object to field (parse will convert to pointer on save) 48 book set('publisher', bookpublisherobject); 49 // or add pointer to field 50 book set('genre', bookgenreobject topointer()); 51	 52 // many to many relation 53 // create a new relation so data can be added 54 let authorsrelation = book relation('authors'); 55 // bookauthorsobjects is an array of parse objects, 56 // you can add to relation by adding the whole array or object by object 57 authorsrelation add(bookauthorsobjects); 58	 59 // after setting the values, save it on the server 60 try { 61 await book save(); 62 // success 63 alert alert('success!'); 64 navigation goback(); 65 return true; 66 } catch (error) { 67 // error can be caused by lack of internet connection 68 alert alert('error!', error message); 69 return false; 70 } 71 } catch (error) { 72 // error can be caused by lack of value selection 73 alert alert( 74 'error!', 75 'make sure to select valid choices in publisher, genre and author fields!', 76 ); 77 return false; 78 } 79 }; todolist tsx 1 const createbook = async function () promise\<boolean> { 2 try { 3 // these values come from state variables linked to 4 // the screen form fields, retrieving the user choices 5 // as a complete parse object, when applicable; 6 const booktitlevalue string = booktitle; 7 const bookisbdvalue string = bookisbd; 8 // for example, bookpublisher holds the value from 9 // radiobutton group field with its options being every 10 // publisher parse object instance saved on server, which is 11 // queried on screen load via useeffect 12 const bookpublisherobject parse object = bookpublisher; 13 const bookgenreobject parse object = bookgenre; 14 // bookauthors can be an array of parse objects, since the book 15 // may have more than one author 16 const bookauthorsobjects \[parse object] = bookauthors; 17	 18 // creates a new parse object instance 19 let book parse object = new parse object('book'); 20	 21 // set data to parse object 22 // simple title field 23 book set('title', booktitlevalue); 24	 25 // 1 1 relation, need to check for uniqueness of value before creating a new isbd object 26 let isbdquery parse query = new parse query('isbd'); 27 isbdquery equalto('name', bookisbdvalue); 28 let isbdqueryresult parse object = await isbdquery first(); 29 if (isbdqueryresult !== null && isbdqueryresult !== undefined) { 30 // if first returns a valid object instance, it means that there 31 // is at least one instance of isbd with the informed value 32 alert alert( 33 'error!', 34 'there is already an isbd instance with this value!', 35 ); 36 return false; 37 } else { 38 // create a new isbd object instance to create a one to one relation on saving 39 let isbd parse object = new parse object('isbd'); 40 isbd set('name', bookisbdvalue); 41 isbd = await isbd save(); 42 // set the new object to the new book object isbd field 43 book set('isbd', isbd); 44 } 45	 46 // one to many relations can be set in two ways 47 // add direct object to field (parse will convert to pointer on save) 48 book set('publisher', bookpublisherobject); 49 // or add pointer to field 50 book set('genre', bookgenreobject topointer()); 51	 52 // many to many relation 53 // create a new relation so data can be added 54 let authorsrelation = book relation('authors'); 55 // bookauthorsobjects is an array of parse objects, 56 // you can add to relation by adding the whole array or object by object 57 authorsrelation add(bookauthorsobjects); 58	 59 // after setting the values, save it on the server 60 try { 61 await book save(); 62 // success 63 alert alert('success!'); 64 navigation goback(); 65 return true; 66 } catch (error) { 67 // error can be caused by lack of internet connection 68 alert alert('error!', error message); 69 return false; 70 } 71 } catch (error) { 72 // error can be caused by lack of value selection 73 alert alert( 74 'error!', 75 'make sure to select valid choices in publisher, genre and author fields!', 76 ); 77 return false; 78 } 79 }; regardez comment les bookauthorsobjects bookauthorsobjects sont définis pour le nouveau livre parse object parse object instance pour créer une relation plusieurs à plusieurs, vous devez d'abord créer un nouveau parse object relation parse object relation puis ajouter les objets liés soit un par un, soit en passant un tableau de parse object parse object en utilisant la parse object relation add parse object relation add méthode parse créera une colonne de type relation et également une table relationnelle dans votre base de données parse créera également un lien pour un accès facile à cette nouvelle table dans la colonne de champ dans le tableau de bord soyez conscient que vous pouvez également gérer des objets et en ajouter de nouveaux à votre relation via le tableau de bord une fois qu'il est créé, alors souvenez vous de ce raccourci lors du développement de votre application 3 interroger des relations plusieurs à plusieurs la récupération des résultats des requêtes d'objets liés plusieurs à plusieurs nécessite quelques étapes supplémentaires par rapport aux requêtes régulières jetez un œil à la fonction de requête dans l'écran de liste des registres de livres javascript 1 const querybooks = async function () { 2 // these values come from state variables linked to 3 // the screen query radiobutton group fields, with its options being every 4 // parse object instance saved on server from the referred class, which is 5 // queried on screen load via useeffect; these variables retrievie the user choices 6 // as a complete parse object; 7 const querypublishervalue = querypublisher; 8 const querygenrevalue = querygenre; 9 const queryauthorvalue = queryauthor; 10 const queryisbdvalue = queryisbd; 11	 12 // reading parse objects is done by using parse query 13 const parsequery = new parse query('book'); 14	 15 // one to many queries 16 if (querypublishervalue !== '') { 17 parsequery equalto('publisher', querypublishervalue); 18 } 19 if (querygenrevalue !== '') { 20 parsequery equalto('genre', querygenrevalue); 21 } 22	 23 // one to one query 24 if (queryisbdvalue !== '') { 25 parsequery equalto('isbd', queryisbdvalue); 26 } 27	 28 // many to many query 29 // in this case, we need to retrieve books related to the chosen author 30 if (queryauthorvalue !== '') { 31 parsequery equalto('authors', queryauthorvalue); 32 } 33	 34 try { 35 let books = await parsequery find(); 36 // many to many objects retrieval 37 // in this example we need to get every related author parse object 38 // and add it to our query result objects 39 for (let book of books) { 40 // this query is done by creating a relation and querying it 41 let bookauthorsrelation = book relation('authors'); 42 book authorsobjects = await bookauthorsrelation query() find(); 43 } 44 setqueriedbooks(books); 45 return true; 46 } catch (error) { 47 // error can be caused by lack of internet connection 48 alert alert('error!', error message); 49 return false; 50 } 51 }; todolist tsx 1 const querybooks = async function () promise\<boolean> { 2 // these values come from state variables linked to 3 // the screen query radiobutton group fields, with its options being every 4 // parse object instance saved on server from the referred class, which is 5 // queried on screen load via useeffect; these variables retrievie the user choices 6 // as a complete parse object; 7 const querypublishervalue parse object = querypublisher; 8 const querygenrevalue parse object = querygenre; 9 const queryauthorvalue parse object = queryauthor; 10 const queryisbdvalue parse object = queryisbd; 11	 12 // reading parse objects is done by using parse query 13 const parsequery parse query = new parse query('book'); 14	 15 // one to many queries 16 if (querypublishervalue !== '') { 17 parsequery equalto('publisher', querypublishervalue); 18 } 19 if (querygenrevalue !== '') { 20 parsequery equalto('genre', querygenrevalue); 21 } 22	 23 // one to one query 24 if (queryisbdvalue !== '') { 25 parsequery equalto('isbd', queryisbdvalue); 26 } 27	 28 // many to many query 29 // in this case, we need to retrieve books related to the chosen author 30 if (queryauthorvalue !== '') { 31 parsequery equalto('authors', queryauthorvalue); 32 } 33	 34 try { 35 let books \[parse object] = await parsequery find(); 36 // many to many objects retrieval 37 // in this example we need to get every related author parse object 38 // and add it to our query result objects 39 for (let book of books) { 40 // this query is done by creating a relation and querying it 41 let bookauthorsrelation = book relation('authors'); 42 book authorsobjects = await bookauthorsrelation query() find(); 43 } 44 setqueriedbooks(books); 45 return true; 46 } catch (error) { 47 // error can be caused by lack of internet connection 48 alert alert('error!', error message); 49 return false; 50 } 51 }; dans ce cas, pour interroger des livres liés à un auteur spécifique, vous devez effectuer un parse query equalto parse query equalto méthode en passant l’ parse object parse object instance comme paramètre après l'interrogation, parse ne stockera pas les parse object parse object instances des champs relationnels plusieurs à plusieurs, seulement une référence au nom de la classe liée, comme {" type" "relation", "classname" "author"} {" type" "relation", "classname" "author"} pour récupérer et afficher des données de ces instances d'objet, vous devez créer une relation et l'interroger à nouveau, en stockant les résultats dans un tableau d'objets de votre propre après cela, vous pouvez itérer sur le tableau d'objets et utiliser le parse object get parse object get méthode pour récupérer le nom de l’auteur voici à quoi ressemble l'écran de liste en utilisant ces procédures conclusion à la fin de ce guide, vous avez appris comment créer et interroger des relations plusieurs à plusieurs dans parse sur react native dans le prochain guide, nous vous montrerons comment effectuer des requêtes et des relations un à un