Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Hubungan entitas memungkinkan kueri GraphQL melintasi entitas terkait, memungkinkan bentuk data yang kompleks dengan satu kueri. Contohnya:
{
books {
items {
id
title
authors {
items {
first_name
last_name
}
}
}
}
}
Untuk mencapai hal ini, DAB harus diberi tahu bagaimana entitas terkait melalui relationships bagian dalam file konfigurasi.
Konfigurasi
Untuk menentukan hubungan antara entitas:
- Gunakan objek
relationshipsdi dalam konfigurasi entitas. -
target.entityBerikan nama. - Atur
cardinalitysebagai"one"atau"many". - Secara opsional tentukan
source.fieldsdantarget.fields. - Gunakan
linking.objectsaat memodelkan hubungan banyak ke banyak tanpa mengekspos tabel gabungan.
Contoh CLI
dab update Book \
--relationship authors \
--target.entity Author \
--cardinality many \
--relationship.fields "id:id" \
--linking.object "dbo.books_authors" \
--linking.source.fields "book_id" \
--linking.target.fields "author_id"
Contoh konfigurasi
"Book": {
"source": "dbo.books",
"relationships": {
"authors": {
"cardinality": "many",
"target.entity": "Author",
"source.fields": [ "id" ],
"target.fields": [ "id" ],
"linking.object": "dbo.books_authors",
"linking.source.fields": [ "book_id" ],
"linking.target.fields": [ "author_id" ]
}
}
}
Satu-ke-Banyak
- Gunakan kardinalitas
"many". - Contoh: A
Seriesmemiliki banyakBooks. - DAB dapat menyimpulkan kolom jika ada kunci asing.
dab update Series \
--relationship books \
--target.entity Book \
--cardinality many
Banyak ke Satu
- Gunakan kardinalitas
"one". - Contoh:
Booktermasuk dalamSeries.
dab update Book \
--relationship series \
--target.entity Series \
--cardinality one
Banyak ke Banyak (objek penautan)
- Gunakan tabel gabungan yang tidak diekspos di GraphQL.
- Tentukan bidang penautan dari sumber ke target melalui tabel gabungan.
dab update Author \
--relationship books \
--target.entity Book \
--cardinality many \
--relationship.fields "id:id" \
--linking.object "dbo.books_authors" \
--linking.source.fields "author_id" \
--linking.target.fields "book_id"
Banyak-ke-Banyak (entitas gabungan eksplisit)
- Mengekspos tabel gabungan sebagai objek GraphQL.
- Tentukan hubungan pada ketiga entitas.
dab add BookAuthor \
--source dbo.books_authors \
--permissions "anonymous:*"
dab update BookAuthor \
--relationship book \
--target.entity Book \
--cardinality one \
--relationship.fields "book_id:id"
dab update BookAuthor \
--relationship author \
--target.entity Author \
--cardinality one \
--relationship.fields "author_id:id"
Hubungan timbal balik
Untuk mengizinkan navigasi di kedua arah (misalnya, dari Book ke Author dan dari Author ke Book), tentukan hubungan kedua pada entitas target yang membalikkan bidang sumber dan target.
Contoh
dab update Author \
--relationship books \
--target.entity Book \
--cardinality many \
--relationship.fields "id:id" \
--linking.object "dbo.books_authors" \
--linking.source.fields "author_id" \
--linking.target.fields "book_id"
Ini dipasangkan dengan hubungan Book ke Author dan memungkinkan penelusuran simetris di GraphQL.
{
authors {
items {
first_name
books {
items {
title
}
}
}
}
}
Dukungan GraphQL
- Bidang terkait muncul sebagai objek berlapis.
- Kardinalitas menentukan apakah daftar atau objek tunggal dikembalikan.
- Nama dan bidang jenis GraphQL cocok dengan nama konfigurasi.
Keterbatasan
- Hubungan mengharuskan entitas ada dalam file konfigurasi yang sama.
- Hanya navigasi satu hop yang didukung.
- Siklus dan bersarang dalam tidak dioptimalkan.
- REST tidak mendukung hubungan (hanya GraphQL).