Flutter
...
Data Objects
การจัดการความสัมพันธ์ 1:หลายใน Parse ด้วย Flutter
15 นาที
ความสัมพันธ์แบบหนึ่งต่อหลายใน flutter บทนำ การใช้ parse คุณสามารถจัดเก็บวัตถุข้อมูลที่สร้างความสัมพันธ์ระหว่างกัน เพื่อจำลองพฤติกรรมนี้ วัตถุใด ๆ parseobject parseobject สามารถใช้เป็นค่าใน parseobject parseobject ภายในเฟรมเวิร์ก parse จะจัดเก็บวัตถุที่ถูกอ้างอิงไว้ในที่เดียวเพื่อรักษาความสอดคล้อง ซึ่งจะช่วยให้คุณมีพลังเพิ่มเติมเมื่อสร้างและรันคำค้นหาที่ซับซ้อน มีประเภทความสัมพันธ์หลักสามประเภท หนึ่งต่อหนึ่ง หนึ่งต่อหนึ่ง , สร้างความสัมพันธ์โดยตรงระหว่างวัตถุสองตัวและเฉพาะพวกเขา; หนึ่งต่อหลาย หนึ่งต่อหลาย , ซึ่งวัตถุหนึ่งสามารถเกี่ยวข้องกับวัตถุอื่น ๆ ได้หลายตัว; หลายต่อหลาย หลายต่อหลาย , ซึ่งสามารถสร้างความสัมพันธ์ที่ซับซ้อนมากมายระหว่างวัตถุหลายตัว ในคู่มือนี้เราจะอธิบายรายละเอียดเกี่ยวกับวิธีการทำงานของ one to many one to many ความสัมพันธ์โดยใช้ตัวอย่างแอปพลิเคชันที่ใช้งานจริง มีสองวิธีในการสร้าง one to many one to many ความสัมพันธ์ใน parse วิธีแรกคือการใช้ pointers pointers ใน child class child class , ซึ่งเป็นวิธีที่เร็วที่สุดในการสร้างและค้นหา วิธีที่สองคือการใช้ arrays arrays ของ pointers pointers ใน parent class ซึ่งอาจทำให้เวลาค้นหาช้า ขึ้นอยู่กับขนาดของมัน เนื่องจากปัญหาด้านประสิทธิภาพนี้ เราจะใช้เฉพาะตัวอย่างที่เป็น pointers เท่านั้น คุณจะสร้างแอปลงทะเบียนหนังสือ flutter และจะสร้างและค้นหาวัตถุที่เกี่ยวข้องโดยใช้ pointers pointers ใน parse ความสัมพันธ์แบบ one to one one to one ไม่เป็นที่นิยมและเราจะไม่ครอบคลุมในคู่มือของเรา ตัวอย่างเช่น ความสัมพันธ์ระหว่างคลาสผู้ใช้และคลาสอื่นที่มีข้อมูลผู้ใช้ที่ละเอียดอ่อนเพื่อ https //blog back4app com/parse server best practices/ ( 1 4 อย่าให้ผู้ใช้เข้าถึงข้อมูลที่ละเอียดอ่อนจากผู้อื่น ) ข้อกำหนดเบื้องต้น https //flutter dev/docs/get started/install https //developer android com/studio หรือ https //code visualstudio com/ (พร้อมกับ https //docs flutter dev/get started/editor dart และ flutter) แอป https //www back4app com/docs/get started/new parse app บน back4app หมายเหตุ ติดตาม https //www back4app com/docs/get started/new parse app เพื่อเรียนรู้วิธีการสร้าง parse app บน back4app แอป flutter ที่เชื่อมต่อกับ back4app หมายเหตุ ติดตาม https //www back4app com/docs/flutter/parse sdk/parse flutter sdk เพื่อสร้างโปรเจกต์ flutter ที่เชื่อมต่อกับ back4app อุปกรณ์ (หรืออุปกรณ์เสมือน) ที่รัน android หรือ ios การทำความเข้าใจแอปหนังสือ วัตถุหลักที่คุณจะใช้คือ หนังสือ หนังสือ คลาส ซึ่งจะเก็บข้อมูลหนังสือแต่ละเล่มในทะเบียน นอกจากนี้ยังมีคลาสวัตถุอีกสามคลาส ผู้จัดพิมพ์ ผู้จัดพิมพ์ ชื่อผู้จัดพิมพ์หนังสือ ความสัมพันธ์แบบหนึ่งต่อหลายกับ หนังสือ หนังสือ ; ประเภท ประเภท ประเภทหนังสือ ความสัมพันธ์แบบหนึ่งต่อหลายกับ หนังสือ หนังสือ โปรดทราบว่าสำหรับตัวอย่างนี้เราจะพิจารณาว่าหนังสือสามารถมีประเภทเดียวเท่านั้น; ผู้เขียน ผู้เขียน ผู้เขียนหนังสือ ความสัมพันธ์แบบหลายต่อหลายกับ หนังสือ หนังสือ , เนื่องจากหนังสือสามารถมีผู้เขียนได้มากกว่าหนึ่งคนและผู้เขียนสามารถมีหนังสือได้มากกว่าหนึ่งเล่มเช่นกัน; การแสดงภาพของโมเดลข้อมูลเหล่านี้ เราจะสมมติว่าแต่ละประเภทของวัตถุ ( ผู้เผยแพร่ ผู้เผยแพร่ , ประเภท ประเภท ) มีเพียงประเภทสตริง ชื่อ ชื่อ และ หนังสือ หนังสือ มี ชื่อเรื่อง ชื่อเรื่อง และ ปี ปี , นอกเหนือจากคุณสมบัติสัมพันธ์เพิ่มเติมใด ๆ ในคู่มือก่อนหน้านี้เราได้เห็นแล้วว่าจะแสดงและอ่าน parseobject parseobject ดังนั้นในคู่มือนี้เราจะไม่ครอบคลุมวิธีการบันทึกและอ่าน ประเภท ประเภท และ ผู้เผยแพร่ ผู้เผยแพร่ วัตถุ คุณจะพบหน้าจอที่ตามมาบนแอปหนังสือ การลงทะเบียนและการจัดทำรายการประเภท การลงทะเบียนและรายการของผู้เผยแพร่ การลงทะเบียนหนังสือ รายการของผู้เผยแพร่และหนังสือ รายละเอียดหนังสือ เราจะไม่อธิบายโค้ดแอปพลิเคชัน flutter เนื่องจากจุดมุ่งหมายหลักของคู่มือนี้คือการใช้ flutter กับ parse โดยใช้ความสัมพันธ์ 1 สร้างเทมเพลตแอปหนังสือ เรามาเริ่มต้นด้วยการรันเทมเพลตโปรเจกต์แอปหนังสือกันก่อน เปิดโปรเจกต์ flutter ของคุณจากคู่มือก่อนหน้า flutter plugin for parse server ที่ https //github com/templates back4app/flutter associations รีโพสิตอรีนี้ก็สามารถให้คุณโคลนและรันโปรเจกต์ได้เช่นกัน คัดลอกไฟล์ https //github com/templates back4app/flutter associations/blob/master/lib/main dart และแทนที่โค้ดปัจจุบันของคุณจากคู่มือก่อนหน้า หมายเหตุ เมื่อ debug debug พารามิเตอร์ในฟังก์ชัน parse() initialize parse() initialize เป็น true true , จะช่วยให้แสดงการเรียก api ของ parse บนคอนโซล การตั้งค่านี้สามารถช่วยในการดีบักโค้ดได้ แนะนำให้ปิดการดีบักในเวอร์ชันที่ปล่อย ขั้นตอนที่ 2 เชื่อมต่อเทมเพลตกับโปรเจกต์ back4app ค้นหา application id และ client key ของคุณโดยไปที่แดชบอร์ดแอปของคุณที่ https //www back4app com/docs/parse dashboard/app settings อัปเดตโค้ดของคุณใน main dart main dart ด้วยค่า applicationid และ clientkey ของโปรเจกต์ของคุณใน back4app keyapplicationid = app id keyclientkey = client key รันโปรเจกต์ และแอปจะโหลดตามที่แสดงในภาพ คลิกที่ เพิ่มประเภท เพิ่มประเภท เพื่อลงทะเบียนและดูรายการของ ประเภท ประเภท ที่จะใช้ในการลงทะเบียนหนังสือ คลิกที่ เพิ่มผู้เผยแพร่ เพิ่มผู้เผยแพร่ เพื่อลงทะเบียนและดูรายชื่อ ผู้เผยแพร่ ผู้เผยแพร่ ที่จะใช้ในการลงทะเบียนหนังสือ คลิกที่ เพิ่มหนังสือ เพิ่มหนังสือ เพื่อลงทะเบียน หนังสือใหม่ หนังสือใหม่ โดยใช้ความสัมพันธ์กับ ประเภท ประเภท และ ผู้เผยแพร่ ผู้เผยแพร่ คลิกที่ รายชื่อผู้เผยแพร่/หนังสือ รายชื่อผู้เผยแพร่/หนังสือ เพื่อดูรายชื่อ ผู้เผยแพร่ ผู้เผยแพร่ และ หนังสือ หนังสือ 3 บันทึกวัตถุหนังสือและความสัมพันธ์ของมัน ฟังก์ชันนี้จะสร้างหนังสือใหม่ในฐานข้อมูล back4app พร้อมความสัมพันธ์ ค้นหาฟังก์ชัน dosavebook dosavebook ในไฟล์ main dart main dart , และแทรกโค้ดด้านล่างภายใน future\<void> dosavebook() future\<void> dosavebook() ฟังก์ชัน 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(); ในการสร้างฟังก์ชันนี้ ให้ทำตามขั้นตอนเหล่านี้ 1\ สร้างอินสแตนซ์ใหม่ของ book book คลาสด้วยคำสั่ง parseobject('book') parseobject('book') 2 ใช้ฟังก์ชัน set set เพื่อกำหนดฟิลด์สำหรับวัตถุนี้ 2 1 title title เป็นแอตทริบิวต์ข้อความที่รับค่าจากตัวควบคุมข้อความ 2 2 genre genre รับค่าด้วยการกำหนด parseobject parseobject ด้วย objectid objectid ของ genre genre ( parse จะเปลี่ยนเป็นพอยเตอร์เมื่อบันทึก ) 2 3 publisher publisher รับค่าด้วยการกำหนด parseobject parseobject ด้วย objectid objectid ของ publisher publisher ( โปรดทราบว่าเราสามารถระบุให้ parse ว่าเราต้องการบันทึกเป็น pointer pointer โดยใช้ topointer() topointer() เมธอด ) 3 เรียกใช้ฟังก์ชัน save save ใน parseobject parseobject , ซึ่งจะลงทะเบียนวัตถุในฐานข้อมูลของคุณใน back4app dashboard เรียกใช้แอปและทดสอบฟังก์ชันใหม่ คลิกที่ เพิ่มหนังสือ เพิ่มหนังสือ ปุ่ม กรอกข้อมูลหนังสือ แอปต้องการให้เลือกผู้เขียน (s) แต่รหัสสำหรับพวกเขาจะถูกกล่าวถึงในคู่มือถัดไปเท่านั้น คลิกที่ บันทึกหนังสือ บันทึกหนังสือ ปุ่ม เพื่อยืนยันว่าอ็อบเจ็กต์ใหม่ถูกบันทึกในฐานข้อมูลพร้อมความสัมพันธ์ คุณสามารถเข้าถึง back4app dashboard back4app dashboard และเข้าถึง book book คลาส หากคุณเข้าถึงคลาส book ของคุณผ่าน dashboard คุณสามารถคลิกที่ค่าชี้วัดอ็อบเจ็กต์และคุณจะถูกเปลี่ยนเส้นทางไปยังอ็อบเจ็กต์ที่อ้างอิง มันอาจดูเหมือนฟีเจอร์ที่ไม่เป็นอันตราย แต่สิ่งนี้ทำให้การดีบักและการติดตามข้อผิดพลาดรวดเร็วกว่าการค้นหามันด้วยตนเองมาก 4 ค้นหารายการหนังสือและอ็อบเจ็กต์ที่เกี่ยวข้อง ฟังก์ชันนี้จะค้นหาหนังสือในฐานข้อมูล back4app โดยใช้ความสัมพันธ์กับผู้จัดพิมพ์ ผ่านผู้จัดพิมพ์ เราจะได้รับรายการหนังสือ ค้นหาฟังก์ชัน getbooklist getbooklist ในไฟล์ main dart main dart , จากนั้นแทนที่โค้ดด้านล่างภายใน future\<list\<parseobject>> getbooklist(string publisherid) future\<list\<parseobject>> getbooklist(string publisherid) ฟังก์ชัน 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 } ในการสร้างฟังก์ชันนี้ ให้ทำตามขั้นตอนเหล่านี้ สร้างอินสแตนซ์ของ parsequery parsequery สำหรับ book book คลาส ใส่เงื่อนไขในคำค้น เพื่อค้นหา books books ที่ publisher publisher ฟิลด์เท่ากับ pointer pointer ของ publisher parseobject publisher parseobject เราจัดเรียงผลลัพธ์ในลำดับ ชื่อ ชื่อ แบบเพิ่มขึ้น ทำการค้นหาด้วยวิธีการค้นหาของ query โดยใช้ query() query() วิธีการ หากการดำเนินการสำเร็จ วัตถุใน book book จะถูกส่งกลับ เรียกใช้แอปและทดสอบการค้นหาใหม่ ก่อนอื่นให้คลิกที่ list publisher/book list publisher/book ปุ่ม เสร็จแล้ว! ในจุดนี้ คุณได้เรียนรู้วิธีการสร้างและสอบถามความสัมพันธ์แบบหนึ่งต่อหลายใน parse บน flutter flutter ในคู่มือถัดไป เราจะแสดงให้คุณเห็นวิธีการสร้างความสัมพันธ์แบบหลายต่อหลายและวิธีการทำการสอบถามที่ส่งคืนข้อมูลจากวัตถุที่เกี่ยวข้อง