iOS
...
Parse Swift SDK
Data Objects

Kuery Data Relasional dengan ParseSwift di iOS

13min

Kueri Relasional

Pendahuluan

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.

Prasyarat

Untuk menyelesaikan tutorial ini, Anda akan membutuhkan:

Tujuan

Kueri data relasional yang disimpan di Database Back4App menggunakan ParseSwift SDK.

1 - Tinjauan cepat tentang kelas Query<U>

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

Swift


Anda dapat membaca lebih lanjut tentang Query<U> kelas di sini pada dokumentasi resmi.

2 - Simpan beberapa data di Database Back4App

Sebelum kita mulai mengeksekusi kueri, perlu untuk menyiapkan beberapa data di Database Back4App. Kita akan menyimpan lima jenis objek:

Author
Book
ISBD
Publisher
BookStore


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.

Swift
Back4App's console


3 - Kuery data

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:

Swift


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

Swift


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

Swift


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

Swift


Implementasi asinkron untuk cuplikan di atas dapat ditulis dengan cara berikut

Swift


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

Swift


Kami kemudian membangun kueri toko menggunakan booksQuery’s results. Metode containedIn(_:array:) mengembalikan batasan yang kami butuhkan untuk kasus ini

Swift


Demikian pula, kami dapat menerapkan proses ini secara asinkron

Swift


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:

Swift


Kesimpulan

Dengan ParseSwift SDK, kami dapat membangun kueri relasional yang memungkinkan kami untuk memilih item berdasarkan jenis hubungan yang mereka miliki dengan tipe data lainnya.