Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Varlık ilişkileri, GraphQL sorgularının ilgili varlıklar arasında geçiş yapmalarına olanak tanıyarak karmaşık veri şekillerini tek bir sorguyla etkinleştirir. Örneğin:
{
books {
items {
id
title
authors {
items {
first_name
last_name
}
}
}
}
}
Bu davranışı elde etmek için, DAB'ye yapılandırma dosyasındaki bölüm aracılığıyla varlıkların relationships nasıl ilişkili olduğu anlatılmalıdır.
Konfigürasyon
Varlıklar arasında ilişki tanımlamak için:
- Varlık yapılandırması içindeki
relationshipsnesnesini kullanın. - Adı giriniz
target.entity. -
cardinalitydeğerini"one"veya"many"olarak ayarlayın. - İsterseniz
source.fieldsvetarget.fieldsbelirtebilirsiniz. -
linking.objectbirleştirme tablosunu göstermeden çoka çok ilişkileri modellerken kullanın.
CLI örneği
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"
Yapılandırma örneği
"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" ]
}
}
}
Birden Çoka
- Kardinalitesini
"many"kullanın. - Örnek: A'da
Seriesçok sayıdaBooksvardır. - DAB, yabancı anahtar varsa alanları tahmin edebilir.
dab update Series \
--relationship books \
--target.entity Book \
--cardinality many
Çoktan Bire
- Kardinalitesini
"one"kullanın. - Örnek: A
Book, birSeriesöğesine aittir.
dab update Book \
--relationship series \
--target.entity Series \
--cardinality one
Çoktan Çoka (ilişkilendirme nesnesi)
- GraphQL'de sunulmamış bir birleştirme tablosu kullanın.
- Birleştirme tablosu aracılığıyla kaynaktan hedefe bağlantı alanları tanımlayın.
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"
Çoktan Çoka (açık birleştirme öğesi)
- Birleştirme tablosunu GraphQL nesnesi olarak kullanıma sunma.
- Üç varlıkta da ilişkileri tanımlayın.
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"
Karşılıklı ilişkiler
Her iki yönde de gezintiye izin vermek için (örneğin, Book öğesinden Author öğesine ve Author öğesinden Book öğesine), hedef varlıkta kaynak ve hedef alanları tersine çeviren ikinci bir ilişki tanımlayın.
Example
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"
Bu yapılandırma, Book ile Author ilişkisi arasında eşleştirilir ve GraphQL'de simetrik dolaşmayı etkinleştirir:
{
authors {
items {
first_name
books {
items {
title
}
}
}
}
}
GraphQL desteği
- İlgili alanlar iç içe nesneler olarak görünür.
- Kardinalite, bir listenin mi yoksa tek bir nesnenin mi döndürüleceğini belirler.
- GraphQL tür adları ve alanları yapılandırma adlarıyla eşleşmektedir.
Sınırlamalar
- İlişkiler, varlıkların aynı yapılandırma dosyasında mevcut olmasını gerektirir.
- Yalnızca tek atlamalı gezinti desteklenir.
- Döngüler ve derin iç içe geçmeler optimize edilmemiştir.
- REST ilişkileri desteklemez (yalnızca GraphQL).