React Native
...
Data objects
1:1 Beziehung
11 min
eins zu eins beziehung einführung im kern vieler backends finden sie die möglichkeit, daten zu speichern mit parse können sie datenobjekte speichern, die beziehungen zwischen ihnen herstellen datenbeziehungen standardisieren, wie jedes datenobjekt mit anderen verbunden oder assoziiert ist das kann ihnen zusätzliche möglichkeiten bieten, wenn sie komplexe abfragen erstellen und ausführen es gibt drei hauptbeziehungstypen eins zu viele eins zu viele , wo ein objekt mit vielen anderen objekten verbunden sein kann; eins zu eins eins zu eins , die direkte beziehungen zwischen zwei objekten und nur diesen herstellen; viele zu viele viele zu viele , die viele komplexe beziehungen zwischen vielen objekten schaffen kann in diesem leitfaden konzentrieren wir uns auf eins zu eins beziehungen diese beziehungen sind in anwendungen, die sensible daten und benutzerverwaltung betreffen, häufig, da sie eindeutige felder erfordern, die durchgesetzt werden müssen, wie z b id nummern und telefonnummern datenbankspeicher backends verlangen in der regel explizite erklärungen dieser assoziationen, und parse hat keine automatische lösung, um solche assoziationen zu erreichen es gibt jedoch möglichkeiten, 1 1 beziehungen in parse zu implementieren, indem man parse cloud parse cloud funktionen auf ihrem server verwendet, um sicherzustellen, dass die tabellenbeziehungen vor dem speichern von daten eindeutig bleiben dies geschieht durch die erstellung von beforesave beforesave funktionen in beiden verwandten klassen und das verhindern des speicherns, wenn die übergeordnete klasse bereits eine instanz in der untergeordneten klasse besitzt, und umgekehrt sie können diese fälle auch in ihrem parse anwendungscode behandeln, indem sie den server vor dem speichern abfragen und die genannte beziehung garantieren dies wird der weg sein, der in diesem leitfaden gezeigt wird, aber beachten sie, dass die verwendung von cloud funktionen viel sauberer und ratsamer ist in diesem leitfaden werden sie eine react native buchregistrierungsanwendung implementieren, die die drei hauptarten von datenassoziationen enthält sie werden lernen, wie man eins zu eins datenbeziehungen mit back4app und react native erstellt und abfragt jederzeit können sie auf dieses projekt über unsere github repositories zugreifen, um die stile und den vollständigen code zu überprüfen javascript beispiel repository typescript beispiel repository voraussetzungen um dieses tutorial abzuschließen, benötigen sie eine react native app, die erstellt und verbunden ist mit back4app wenn sie das bildschirmlayout, das in diesem leitfaden bereitgestellt wird, testen/verwenden möchten, sollten sie die react native paper react native paper bibliothek ziel um eins zu eins datenbankbeziehungen in react native mit parse in einem realistischen szenario durchzuführen und zu demonstrieren 1 verständnis der buchklasse da wir in diesem leitfaden ein beispiel für eine buchregistrierungsanwendung verwenden, müssen sie zunächst verstehen, wie die objektbeziehungen in dieser datenbank angeordnet sind die hauptobjektklasse, die sie verwenden werden, ist die buch buch klasse, die jeden bucheintrag in der registrierung speichert dies sind die anderen vier objektklassen verlag verlag name des buchverlags, eins zu viele beziehung mit buch buch genre genre buchgenre, eins zu viele beziehung mit buch buch beachten sie, dass wir in diesem beispiel davon ausgehen, dass ein buch nur ein genre haben kann; autor autor buchautor, viele zu viele beziehung mit buch buch , da ein buch mehr als einen autor haben kann und ein autor mehr als ein buch haben kann; isdb isdb buch isdb identifikationsnummer, eins zu eins beziehung mit buch buch , da diese nummer für jedes buch einzigartig ist hier ist eine visuelle darstellung dieser datenbanktabellen zur vereinfachung nehmen wir an, dass jede objektklasse nur einen string typ namen namen attribut ( titel titel für das buch buch ), abgesehen von zusätzlichen relationalen attributen 2 erstellen von eins zu viele beziehungen bevor wir zu diesem schritt übergehen, empfehlen wir ihnen, das react native library app beispiel zu klonen und auszuführen ( javascript beispiel repository , typescript beispiel repository ) diese anwendung hat zwei hauptbildschirme einen, der für die auflistung der registrierten bücher verantwortlich ist, und einen anderen, der für die erstellung neuer bücher zuständig ist im buchregistrierungsformular gibt es direkte links zu den anderen verwandten objekten und ein textinput textinput feld, das dem isbd wert des buches zugeordnet ist, das verwendet wird, um ihre eins zu eins beziehung zu erstellen lassen sie uns die bucherstellungsmethode ansehen, die beim einreichen dieses formulars aufgerufen wird 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 }; schau, wie der bookisbdvalue bookisbdvalue auf das neue buch parse object parse object instanz eingestellt ist das erstellen und speichern von eins zu eins und eins zu viele beziehungen in parse sind ähnliche prozesse, bei denen du als argument die parse object parse object instanz mit der parse object set parse object set methode übergibst, die zwei argumente benötigt den feldnamen und den wert, der gesetzt werden soll der haken dabei ist, dass sie vor dem speichern sicherstellen müssen, dass es keine isbd isbd objekte gibt, die den angegebenen isbd id zeichenfolgewert in ihrer datenbank enthalten, und dass es keine buch buch objekte gibt, die bereits damit verknüpft sind der zweite teil wird in diesem fall immer wahr sein, da sie jedes mal ein neues buch buch objekt erstellen die durchsetzung der isbd isbd eindeutigkeit kann durch die folgende hervorgehobene abfrage erreicht werden javascript 1 let isbdquery = new parse query('isbd'); 2 isbdquery equalto('name', bookisbdvalue); 3 let isbdqueryresult = await isbdquery first(); 4 if (isbdqueryresult !== null && isbdqueryresult !== undefined) { 5 // if first returns a valid object instance, it means that there 6 // is at least one instance of isbd with the informed value 7 alert alert( 8 'error!', 9 'there is already an isbd instance with this value!', 10 ); 11 return false; 12 } todolist tsx 1 let isbdquery parse query = new parse query('isbd'); 2 isbdquery equalto('name', bookisbdvalue); 3 let isbdqueryresult parse object = await isbdquery first(); 4 if (isbdqueryresult !== null && isbdqueryresult !== undefined) { 5 // if first returns a valid object instance, it means that there 6 // is at least one instance of isbd with the informed value 7 alert alert( 8 'error!', 9 'there is already an isbd instance with this value!', 10 ); 11 return false; 12 } nachdem sie ihre objekte erfolgreich gespeichert haben, erstellt parse eine spalte vom datentyp zeiger und einen direkten link auf ihrem dashboard für einen schnellen zugriff im hintergrund 3 abfragen von eins zu eins beziehungen die abfrage von eins zu eins verwandten objekten ist ziemlich einfach, da ein großteil davon von parse verarbeitet wird werfen sie einen blick auf die abfragefunktion im bildschirm der buchregisterliste 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 }; in diesem fall müssen sie nur die parse query equalto parse query equalto methode aufrufen und die parse object parse object instanz als parameter übergeben nach der abfrage wird parse die vollständigen instanzen aller eins zu eins beziehungsfelder in den resultierenden objekten speichern um daten aus diesen objektinstanzen abzurufen und anzuzeigen, können sie die parse object get parse object get methode wie folgt verketten bookparseobject get(('isbd') get('name') bookparseobject get(('isbd') get('name') so sieht der listenbildschirm aus, wenn sie diese getter verwenden, um den isbd namen aus den listenelementen abzurufen fazit am ende dieses leitfadens haben sie gelernt, wie man eins zu eins beziehungen in parse auf react native erstellt und abfragt im nächsten leitfaden zeigen wir ihnen, wie sie benutzer registrieren