Kuery Data Relasional dengan ParseSwift di iOS
Dalam panduan sebelumnya kami menjelaskan bagaimana kami dapat melakukan berbagai kueri pada Database Back4App. Dalam panduan ini, kami fokus pada jenis kueri tertentu yang melibatkan objek dengan relasi.
Untuk menyelesaikan tutorial ini, Anda akan membutuhkan:
- Aplikasi iOS dasar untuk menguji kueri
Kueri data relasional yang disimpan di Database Back4App menggunakan ParseSwift SDK.
Setiap kueri yang dilakukan pada Database Back4App dilakukan melalui kelas generik Query<U>. Parameter generik U (yang sesuai dengan protokol ParseObject) adalah tipe data dari objek yang ingin kita ambil dari database.
Diberikan tipe data seperti MyObject, kita mengambil objek-objek ini dari Database Back4App dengan cara berikut
Anda dapat membaca lebih lanjut tentang Query<U> kelas di sini pada dokumentasi resmi.
Sebelum kita mulai mengeksekusi kueri, perlu untuk menyiapkan beberapa data di Database Back4App. Kita akan menyimpan lima jenis objek:
Selain itu, untuk membangun kueri untuk data relasional, kita akan menerapkan hubungan berikut
- 1:1 hubungan antara Buku dan ISBD.
- 1:N hubungan antara Buku dan Penerbit.
- M:N hubungan antara Buku dan Penulis.
- M:N hubungan antara Toko Buku dan Buku.
Kami sekarang melanjutkan untuk menyimpan beberapa data di Database Back4App. Langkah ini dapat diimplementasikan menggunakan Swift atau langsung dari konsol aplikasi Anda di platform Back4App.
Setelah basis data memiliki beberapa data contoh untuk dikerjakan, kita mulai mengeksekusi berbagai jenis kueri yang terkait dengan relasi yang dijelaskan sebelumnya.
Kueri yang melibatkan relasi 1:1
Diberikan dua tipe data yang berbagi relasi 1:1 (Buku dan ISBD dalam hal ini), kita dapat mengambil satu dari yang lain sebagai berikut. Cara kita mengimplementasikan relasi di Buku memungkinkan kita untuk mengambil ISBD terkait hanya dengan memanggil metode include(_:) pada kueri. Mari kita ambil ISBD dari buku A Love Story:
Di sisi lain, kueri untuk mengambil objek Buku yang terkait dengan ISBD tertentu diimplementasikan dengan cara berikut. Dengan melihat implementasi ISBD, kita mencatat bahwa relasi diwakili oleh properti buku (dari tipe Pointer<book>). Pointer ini menyediakan serangkaian metode dan properti untuk mengambil informasi tentang objek yang ditunjuknya. Secara khusus, kita memanggil metode fetch(...) pada properti buku untuk mengambil Buku
Kita harus mencatat bahwa implementasi untuk 1:1 hubungan ini tidak unik. Tergantung pada kasus penggunaan Anda, Anda dapat mengimplementasikan 1:1 hubungan dengan cara yang berbeda.
Kueri yang melibatkan hubungan 1:N
Dalam skenario di mana kita perlu mengkueri semua buku yang diterbitkan oleh penerbit tertentu, kita pertama-tama perlu mengambil penerbit tersebut. Misalnya, kita pertama-tama mengambil objek data yang terkait dengan penerbit Acacia Publishings. Tergantung pada situasi, proses ini dapat bervariasi
Sekarang kita memiliki akses ke acaciaPublishings, kita dapat membangun kueri untuk mengambil buku-buku terkaitnya. Kita melanjutkan untuk membuat kueri dengan menginstansiasi kelas Query<Book> . Dalam hal ini, kelas ini diinstansiasi menggunakan metode statis query(...) yang disediakan oleh objek Book. Argumen (variadic) untuk metode ini adalah objek QueryConstraint standar. Oleh karena itu, buku-buku yang kita cari diambil dengan cuplikan berikut
Implementasi asinkron untuk cuplikan di atas dapat ditulis dengan cara berikut
Query yang melibatkan hubungan M:N (Kasus 1)
Untuk menggambarkan kasus ini, kita mempertimbangkan skenario berikut; kita ingin mencantumkan semua toko yang memiliki buku yang diterbitkan setelah tanggal tertentu (misalnya, 01/01/2010). Pertama, kita memerlukan query perantara untuk memilih buku-buku tersebut. Selanjutnya, kita membangun query utama untuk mencantumkan toko-toko.
Oleh karena itu, kita menyiapkan query pertama untuk buku-buku
Kami kemudian membangun kueri toko menggunakan booksQuery’s results. Metode containedIn(_:array:) mengembalikan batasan yang kami butuhkan untuk kasus ini
Demikian pula, kami dapat menerapkan proses ini secara asinkron
Kueri yang melibatkan hubungan M:N (Kasus 2)
Misalkan kita perlu memilih semua toko yang memiliki buku yang ditulis oleh seorang penulis tertentu, katakanlah, Aaron Writer. Untuk mencapai ini, kita memerlukan dua kueri tambahan:
- Sebuah kueri (Query<Author>) untuk mendapatkan objek yang terkait dengan penulis Aaron Writer.
- Sebuah kueri (Query<Book>) untuk memilih semua buku yang ditulis oleh Aaron Writer.
- Kueri utama (Query<BookStore>) untuk memilih toko yang kita cari.
Prosedur untuk menerapkan kueri ini sangat mirip dengan yang sebelumnya:
Dengan ParseSwift SDK, kami dapat membangun kueri relasional yang memungkinkan kami untuk memilih item berdasarkan jenis hubungan yang mereka miliki dengan tipe data lainnya.