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
}
}
}
}
}
Bunu başarmak için, DAB'ye varlıkların yapılandırma dosyasındaki relationships bölüm aracılığıyla 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. -
target.entityadını sağlayın. -
cardinalityöğesini"one"veya"many"olarak ayarlayın. - İsteğe bağlı olarak
source.fieldsvetarget.fieldsbelirtin. -
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" ]
}
}
}
Bire Çok
- Kardinalitesini
"many"kullanın. - Örnek: A'da
Seriesçok sayıdaBooksvardır. - DAB, yabancı anahtar varsa alanları türetebilir.
dab update Series \
--relationship books \
--target.entity Book \
--cardinality many
Çoka Bir
- Kardinalitesini
"one"kullanın. - Örnek: A
Book, birSeriesöğesine aittir.
dab update Book \
--relationship series \
--target.entity Series \
--cardinality one
Çoktan Çoka (bağlantı nesnesi)
- GraphQL'de sunulmayan 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"
Çoka Çok (açık eşleme varlığı)
- 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 ve Author öğesinden Book hedeflerine), hedef varlıkta kaynak ve hedef alanları tersine çeviren ikinci bir ilişki tanımlayın.
Örnek
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, Book ve Author ilişkisi ile eşleştirme sağlar 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çme iyileştirilmemiştir.
- REST ilişkileri desteklemez (yalnızca GraphQL).