Flutter
...
Data Objects
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 relations relations , 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 tableaux tableaux de pointeurs pointeurs qui peuvent entraîner des temps de requête lents en fonction de leur taille la troisième consiste à utiliser jointable jointable où l'idée vient des bases de données classiques lorsqu'il y a une relation plusieurs à plusieurs, nous combinons chaque objectid objectid ou pointeur pointeur 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 relation plusieurs à plusieurs relation plusieurs à plusieurs sur une application d'enregistrement de livres flutter en utilisant les relations relations 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é (avec plugins 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 relation un à plusieurs relation un à plusieurs 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 dosavebook dosavebook dans le fichier main dart main dart , et remplacez par le code ci dessous à l'intérieur de la future\<void> dosavebook() future\<void> dosavebook() 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 livre livre classe avec la commande parseobject('livre') parseobject('livre') 2 utilisez le ensemble ensemble fonction pour définir les champs de cet objet 2 1 titre titre est un attribut de texte qui reçoit une valeur du contrôleur de texte 2 2 genre genre reçoit la valeur en définissant un parseobject parseobject avec le objectid objectid de la genre genre ( parse convertira en pointeur lors de l'enregistrement ) 2 3 éditeur éditeur reçoit la valeur en définissant un parseobject parseobject avec l' objectid objectid du éditeur éditeur ( notez que nous pouvons spécifier pour parse que nous voulons enregistrer en tant que pointeur pointeur en utilisant le topointer() topointer() méthode ) 2 4 auteurs auteurs nous appelons le addrelation addrelation méthode de parseobject parseobject , envoyant une liste de parseobject parseobject avec le objectid objectid des auteurs auteurs sélectionnés 3 appelez le sauvegarder sauvegarder fonction dans parseobject parseobject , 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 dosavebook() dosavebook() 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 ajouter un livre ajouter un livre bouton remplissez les informations du livre avec les auteurs cliquez sur enregistrer le livre enregistrer le livre bouton pour confirmer que le nouvel objet est enregistré dans la base de données avec des relations, vous pouvez accéder au tableau de bord back4app tableau de bord back4app et accéder à la classe livre livre 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 includeobject includeobject dans notre exemple, nous voulons renvoyer les livres, avec des informations sur le genre et les éditeurs recherchez la fonction getbookdetail getbookdetail dans le fichier main dart main dart , puis remplacez le code ci dessous à l'intérieur de la getbookdetail(parseobject book) getbookdetail(parseobject book) 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 parsequery parsequery objet pour livre livre classe insérer une condition dans la requête, pour rechercher livres livres où objectid objectid champ est égal objectid objectid 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 query() query() méthode si les opérations réussissent, l'objet dans livre livre 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 bookgenre = book get\<parseobject>('genre') get\<string>('name'); bookgenre = book get\<parseobject>('genre') get\<string>('name'); 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 parsequery parsequery objet pour la classe authors authors insérez une condition dans la requête, en utilisant l'opérateur whererelatedto whererelatedto pour rechercher la relation authors authors avec book book , où book book est égal à l' objectid objectid du livre sélectionné effectuez une recherche avec la méthode de recherche de la requête en utilisant la méthode query() query() si les opérations réussissent, l'objet dans book book 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 liste des éditeurs/livres liste des éditeurs/livres 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 flutter flutter