Créer des Relations 1:N avec Parse dans Flutter
16 min
relation un à plusieurs sur flutter introduction en utilisant parse, vous pouvez stocker des objets de données établissant des relations entre eux pour modéliser ce comportement, tout \<font color="#2166ae">parseobject\</font> peut être utilisé comme valeur dans d'autres \<font color="#2166ae">parseobject\</font> en interne, le framework parse stockera l'objet référencé à un seul endroit, pour maintenir la cohérence 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 \<font color="#2166ae">un à un\</font> , établissant des relations directes entre deux objets et seulement eux ; \<font color="#2166ae">un à plusieurs\</font> , où un objet peut être lié à plusieurs autres objets ; \<font color="#2166ae">plusieurs à plusieurs\</font> , ce qui peut créer de nombreuses relations complexes entre de nombreux objets dans ce guide, nous allons détailler comment la \<font color="#2166ae">relation un à plusieurs\</font> fonctionne en utilisant un exemple d'application pratique il existe deux façons de créer une \<font color="#2166ae">relation un à plusieurs\</font> dans parse la première consiste à utiliser les \<font color="#2166ae">pointeurs\</font> dans \<font color="#2166ae">classe enfant\</font> , ce qui est le plus rapide en termes de création et de temps de requête la seconde consiste à utiliser des \<font color="#2166ae">tableaux\</font> de \<font color="#2166ae">pointeurs\</font> dans la classe parent, 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 n'utiliserons que des exemples de pointeurs vous allez implémenter une application d'enregistrement de livres flutter et créer et interroger des objets liés en utilisant les \<font color="#2166ae">pointeurs\</font> la relation en tant que \<font color="#2166ae">un à un\</font> n'est pas courante et nous ne l'aborderons pas dans nos guides par exemple, une relation entre la classe utilisateur et une autre classe qui contiendra des données utilisateur sensibles pour des raisons de sécurité https //blog back4app com/parse server best practices/ ( 1 4 ne laissez pas les utilisateurs accéder aux données sensibles des autres ) conditions préalables version de flutter 2 2 x ou ultérieure https //flutter dev/docs/get started/install 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) une application créée https //www back4app com/docs/get started/new parse app sur back4app remarque suivez le tutoriel de nouvelle application parse https //www back4app com/docs/get started/new parse app pour apprendre à créer une application parse sur back4app une application flutter connectée à back4app remarque suivez le installer le sdk parse sur le projet flutter https //www back4app com/docs/flutter/parse sdk/parse flutter sdk pour créer un projet flutter connecté à back4app un appareil (ou un appareil virtuel) exécutant android ou ios comprendre l'application book la classe d'objet principale que vous utiliserez est la \<font color="#2166ae">livre\</font> , stockant chaque entrée de livre dans l'enregistrement de plus, voici les trois autres classes d'objet \<font color="#2166ae">éditeur\</font> nom de l'éditeur du livre, relation un à plusieurs avec \<font color="#2166ae">livre\</font> ; \<font color="#2166ae">genre\</font> genre du livre, relation un à plusieurs avec \<font color="#2166ae">livre\</font> notez que pour cet exemple, nous considérerons qu'un livre ne peut avoir qu'un seul genre ; \<font color="#2166ae">auteur\</font> auteur du livre, relation plusieurs à plusieurs avec \<font color="#2166ae">livre\</font> , puisque un livre peut avoir plus d'un auteur et un auteur peut avoir plus d'un livre également ; une représentation visuelle de ce modèle de données nous allons supposer que chaque classe d'objet ( \<font color="#2166ae">éditeur\</font> , \<font color="#2166ae">genre\</font> ) n'a qu'un type de chaîne \<font color="#2166ae">nom\</font> attribut et \<font color="#2166ae">livre\</font> a \<font color="#2166ae">titre\</font> et \<font color="#2166ae">année\</font> , en plus de tout attribut relationnel supplémentaire dans les guides précédents, nous avons déjà vu comment enregistrer et lire \<font color="#2166ae">parseobject\</font> donc dans ce guide, nous ne couvrirons pas comment enregistrer et lire \<font color="#2166ae">genre\</font> et \<font color="#2166ae">éditeur\</font> objets vous trouverez les écrans suivants sur l'application livre enregistrement et liste des genres enregistrement et liste des éditeurs enregistrement de livre liste des éditeurs et des livres détails du livre nous n'expliquerons pas le code de l'application flutter puisque l'objectif principal de ce guide est d'utiliser flutter avec parse en utilisant des relations 1 créer un modèle d'application de livre commençons par exécuter le modèle de projet de l'application de livre ouvrez votre projet flutter du guide précédent flutter plugin for parse server le book flutter app https //github com/templates back4app/flutter associations le dépôt est également disponible pour que vous puissiez cloner et exécuter le projet copiez le main dart https //github com/templates back4app/flutter associations/blob/master/lib/main dart fichier et remplacez votre code actuel des guides précédents remarque lorsque \<font color="#2166ae">debug\</font> le paramètre dans la fonction \<font color="#2166ae">parse() initialize\</font> est \<font color="#2166ae">true\</font> , cela permet d'afficher les appels api de parse sur la console cette configuration peut aider à déboguer le code il est conseillé de désactiver le débogage dans la version de production étape 2 connecter le modèle au projet back4app trouvez votre identifiant d'application et vos clés de client en naviguant vers le tableau de bord de votre application à tableau de bord back4app >paramètres de l'application >sécurité & clés https //www back4app com/docs/parse dashboard/app settings mettez à jour votre code dans \<font color="#2166ae">main dart\</font> avec les valeurs de l'applicationid et du clientkey de votre projet dans back4app keyapplicationid = identifiant d'application keyclientkey = clé de client exécutez le projet, et l'application se chargera comme indiqué dans l'image cliquez sur \<font color="#2166ae">ajouter un genre\</font> pour enregistrer et voir la liste des \<font color="#2166ae">genres\</font> qui seront utilisés dans l'enregistrement des livres cliquez sur \<font color="#2166ae">ajouter un éditeur\</font> pour vous inscrire et voir la liste des \<font color="#2166ae">éditeurs\</font> qui seront utilisés dans l'enregistrement des livres cliquez sur \<font color="#2166ae">ajouter un livre\</font> pour enregistrer un nouveau \<font color="#2166ae">livre\</font> en utilisant des relations avec \<font color="#2166ae">genre\</font> et \<font color="#2166ae">éditeur\</font> cliquez sur \<font color="#2166ae">liste des éditeurs/livres\</font> pour voir la liste des \<font color="#2166ae">éditeurs\</font> et \<font color="#2166ae">livres\</font> 3 enregistrer un objet livre et ses relations cette fonction créera un nouveau livre dans la base de données back4app avec des relations recherchez la fonction \<font color="#2166ae">dosavebook\</font> dans le fichier \<font color="#2166ae">main dart\</font> , et insérez le code ci dessous à l'intérieur de la \<font color="#2166ae">future\<void\> dosavebook()\</font> fonction 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( 8 'publisher', 9 (parseobject('publisher') objectid = publisher objectid) 10 topointer()); 11 12 await book save(); pour construire cette fonction, suivez ces étapes 1\ créez une nouvelle instance de la classe \<font color="#2166ae">book\</font> avec la commande \<font color="#2166ae">parseobject('book')\</font> 2 utilisez la fonction \<font color="#2166ae">set\</font> pour définir les champs de cet objet 2 1 \<font color="#2166ae">title\</font> est un attribut 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 l' \<font color="#2166ae">objectid\</font> du \<font color="#2166ae">genre\</font> ( parse convertira en pointeur lors de l'enregistrement ) 2 3 \<font color="#2166ae">publisher\</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">publisher\</font> ( notez que nous pouvons spécifier à parse que nous voulons enregistrer en tant que \<font color="#2166ae">pointeur\</font> en utilisant la méthode \<font color="#2166ae">topointer()\</font> ) 3 appelez la fonction \<font color="#2166ae">save\</font> dans \<font color="#2166ae">parseobject\</font> , ce 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 fonction cliquez sur le \<font color="#2166ae">ajouter un livre\</font> bouton remplissez les informations du livre l'application nécessite la sélection des auteurs, mais le code pour eux ne sera couvert que dans le prochain guide 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">back4app dashboard\</font> et accéder à la classe \<font color="#2166ae">book\</font> si vous accédez à votre classe book en utilisant le dashboard, vous pouvez cliquer sur la valeur du pointeur d'objet et vous serez redirigé vers 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 4 interroger la liste des livres et ses objets associés cette fonction interrogera les livres dans la base de données back4app en utilisant des relations avec l'éditeur grâce à l'éditeur, nous obtiendrons la liste des livres recherchez la fonction \<font color="#2166ae">getbooklist\</font> dans le fichier \<font color="#2166ae">main dart\</font> , puis remplacez le code ci dessous à l'intérieur de la fonction \<font color="#2166ae">future\<list\<parseobject\>\> getbooklist(string publisherid)\</font> 1 querybuilder\<parseobject> querybook = 2 querybuilder\<parseobject>(parseobject('book')) 3 whereequalto('publisher', 4 (parseobject('publisher') objectid = publisherid) topointer()) 5 orderbyascending('title'); 6 final parseresponse apiresponse = await querybook query(); 7 8 if (apiresponse success && apiresponse results != null) { 9 return apiresponse results; 10 } else { 11 return \[]; 12 } pour construire cette fonction, suivez ces étapes créez une instance de \<font color="#2166ae">parsequery\</font> objet pour \<font color="#2166ae">book\</font> classe insérez une condition dans la requête, pour rechercher des \<font color="#2166ae">books\</font> où le champ \<font color="#2166ae">publisher\</font> est égal à \<font color="#2166ae">pointer\</font> de \<font color="#2166ae">publisher parseobject\</font> nous trions le résultat par ordre croissant de \<font color="#2166ae">nom\</font> effectuez une recherche de la méthode query en utilisant la méthode \<font color="#2166ae">query()\</font> si les opérations réussissent, les objets dans \<font color="#2166ae">book\</font> seront retournés exécutez l'application et testez la nouvelle requête tout d'abord, cliquez sur le bouton \<font color="#2166ae">liste publisher/book\</font> c'est fait! à ce stade, vous avez appris à créer et interroger des relations un à plusieurs dans parse sur \<font color="#2166ae">flutter\</font> dans le prochain guide, nous vous montrerons comment établir des relations plusieurs à plusieurs et comment effectuer des requêtes renvoyant des données d'objets liés