Relations plusieurs-à-plusieurs avec Parse SDK sur Flutter
11 min
relation plusieurs à plusieurs sur flutter introduction dans le guide précédent, nous avons appris à utiliser des relations un à plusieurs et nous allons continuer avec notre projet dans ce guide, nous nous concentrerons sur la relation la plus courante plusieurs à plusieurs il existe trois façons de créer une relation plusieurs à plusieurs dans parse la première consiste à utiliser les \<font color="#2166ae">relations\</font> , qui est la plus rapide en termes de création et de temps de requête nous utiliserons cela dans ce guide la deuxième consiste à utiliser des \<font color="#2166ae">tableaux\</font> de \<font color="#2166ae">pointeurs\</font> qui peuvent entraîner des temps de requête lents en fonction de leur taille la troisième consiste à utiliser \<font color="#2166ae">jointable\</font> où l'idée vient des bases de données classiques lorsqu'il y a une relation plusieurs à plusieurs, nous combinons chaque \<font color="#2166ae">objectid\</font> ou \<font color="#2166ae">pointeur\</font> des deux côtés pour construire une nouvelle table séparée dans laquelle la relation est suivie dans ce guide, vous allez implémenter une \<font color="#2166ae">relation plusieurs à plusieurs\</font> sur une application d'enregistrement de livres flutter en utilisant les \<font color="#2166ae">relations\</font> vous apprendrez à créer et à interroger des relations de données plusieurs à plusieurs et comment effectuer des requêtes retournant des données d'objets liés, en utilisant back4app et le sdk flutter prérequis android studio https //developer android com/studio ou vs code installé https //code visualstudio com/ (avec plugins https //docs flutter dev/get started/editor dart et flutter) remarque l'application flutter créée dans le guide précédent complétez le guide précédent afin d'avoir une meilleure compréhension de la \<font color="#2166ae">relation un à plusieurs\</font> classe un appareil (ou un appareil virtuel) exécutant android ou ios 1 exécutez le modèle d'application book si vous n'avez pas terminé le guide précédent, vous pouvez cloner et exécuter le projet complet de book flutter app https //github com/templates back4app/flutter associations depuis notre dépôt vous pouvez également consulter le guide précédent https //www back4app com/docs/flutter/parse sdk/data objects/%7bsite baseurl%7d%7d//flutter/parse sdk/data objects/flutter one to many relationship pour mieux comprendre le modèle de l'application ci dessous, vous pouvez trouver une représentation visuelle du modèle de données d'enregistrement de livre 2 enregistrer un objet livre et son auteur ouvrez le projet flutter du guide précédent relation un à plusieurs sur flutter https //www back4app com/docs//flutter/parse sdk/data objects/flutter one to many relationship recherchez la fonction \<font color="#2166ae">dosavebook\</font> dans le fichier \<font color="#2166ae">main dart\</font> , et remplacez par le code ci dessous à l'intérieur de la \<font color="#2166ae">future\<void\> dosavebook()\</font> fonction ci dessous cette fonction créera un nouveau livre dans le magasin de données back4app avec des relations 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(); pour construire cette fonction, suivez ces étapes 1\ créez une nouvelle instance de la parse \<font color="#2166ae">livre\</font> classe avec la commande \<font color="#2166ae">parseobject('livre')\</font> 2 utilisez le \<font color="#2166ae">ensemble\</font> fonction pour définir les champs de cet objet 2 1 \<font color="#2166ae">titre\</font> est un attribut de texte qui reçoit une valeur du contrôleur de texte 2 2 \<font color="#2166ae">genre\</font> reçoit la valeur en définissant un \<font color="#2166ae">parseobject\</font> avec le \<font color="#2166ae">objectid\</font> de la \<font color="#2166ae">genre\</font> ( parse convertira en pointeur lors de l'enregistrement ) 2 3 \<font color="#2166ae">éditeur\</font> reçoit la valeur en définissant un \<font color="#2166ae">parseobject\</font> avec l' \<font color="#2166ae">objectid\</font> du \<font color="#2166ae">éditeur\</font> ( notez que nous pouvons spécifier pour parse que nous voulons enregistrer en tant que \<font color="#2166ae">pointeur\</font> en utilisant le \<font color="#2166ae">topointer()\</font> méthode ) 2 4 \<font color="#2166ae">auteurs\</font> nous appelons le \<font color="#2166ae">addrelation\</font> méthode de \<font color="#2166ae">parseobject\</font> , envoyant une liste de \<font color="#2166ae">parseobject\</font> avec le \<font color="#2166ae">objectid\</font> des \<font color="#2166ae">auteurs\</font> sélectionnés 3 appelez le \<font color="#2166ae">sauvegarder\</font> fonction dans \<font color="#2166ae">parseobject\</font> , qui enregistrera effectivement l'objet dans votre base de données dans le tableau de bord back4app exécutez l'application et testez la nouvelle \<font color="#2166ae">dosavebook()\</font> fonction tout d'abord, accédez au tableau de bord et supprimez les livres qui ont été précédemment enregistrés dans le guide précédent cliquez sur le \<font color="#2166ae">ajouter un livre\</font> bouton remplissez les informations du livre avec les auteurs cliquez sur \<font color="#2166ae">enregistrer le livre\</font> bouton pour confirmer que le nouvel objet est enregistré dans la base de données avec des relations, vous pouvez accéder au \<font color="#2166ae">tableau de bord back4app\</font> et accéder à la classe \<font color="#2166ae">livre\</font> cliquer sur la valeur de l'objet pointeur/relation dans votre tableau de bord vous mènera à l'entrée de l'objet référencé cela peut sembler être une fonctionnalité inoffensive, mais cela rend le débogage et le traçage des erreurs beaucoup plus rapides que de le rechercher manuellement 3 interroger les détails du livre avec des relations cette fonction interrogera les détails du livre dans la base de données back4app, renvoyant des données de relation dans certaines situations, vous souhaitez renvoyer plusieurs types d'objets liés en une seule requête vous pouvez le faire avec la méthode \<font color="#2166ae">includeobject\</font> dans notre exemple, nous voulons renvoyer les livres, avec des informations sur le genre et les éditeurs recherchez la fonction \<font color="#2166ae">getbookdetail\</font> dans le fichier \<font color="#2166ae">main dart\</font> , puis remplacez le code ci dessous à l'intérieur de la \<font color="#2166ae">getbookdetail(parseobject book)\</font> fonction 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 } pour construire cette fonction, suivez ces étapes créer une instance de \<font color="#2166ae">parsequery\</font> objet pour \<font color="#2166ae">livre\</font> classe insérer une condition dans la requête, pour rechercher \<font color="#2166ae">livres\</font> où \<font color="#2166ae">objectid\</font> champ est égal \<font color="#2166ae">objectid\</font> du livre sélectionné nous utilisons la méthode includeobject, en informant les champs des pointeurs dont nous voulons retourner les données dans la même requête genre et éditeur vous pouvez également faire un includeobject multi niveau en utilisant la notation par points exemple ` includeobject(\[‘post’, ‘post authors’]); faire une méthode de recherche de requête en utilisant \<font color="#2166ae">query()\</font> méthode si les opérations réussissent, l'objet dans \<font color="#2166ae">livre\</font> sera retourné nous utilisons la méthode get pour récupérer les données pour les champs qui sont des pointeurs, nous devrons d'abord récupérer le pointeur, puis obtenir ses données exemple \<font color="#2166ae">bookgenre = book get\<parseobject\>('genre') get\<string\>('name');\</font> dans la deuxième étape du traitement, nous devons récupérer les auteurs associés au livre pour construire cette fonction, suivez ces étapes créez une instance de \<font color="#2166ae">parsequery\</font> objet pour la classe \<font color="#2166ae">authors\</font> insérez une condition dans la requête, en utilisant l'opérateur \<font color="#2166ae">whererelatedto\</font> pour rechercher la relation \<font color="#2166ae">authors\</font> avec \<font color="#2166ae">book\</font> , où \<font color="#2166ae">book\</font> est égal à l' \<font color="#2166ae">objectid\</font> du livre sélectionné effectuez une recherche avec la méthode de recherche de la requête en utilisant la méthode \<font color="#2166ae">query()\</font> si les opérations réussissent, l'objet dans \<font color="#2166ae">book\</font> sera retourné nous utilisons la méthode get pour récupérer les données exécutez l'application et testez la nouvelle requête tout d'abord, cliquez sur le bouton \<font color="#2166ae">liste des éditeurs/livres\</font> sélectionnez un livre dans la liste l'écran suivant affichera les données des livres et leurs relations c'est fait ! à ce stade, vous avez appris à créer et à interroger des relations plusieurs à plusieurs et comment effectuer des requêtes retournant des données d'objets liés dans parse sur \<font color="#2166ae">flutter\</font>