Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Relace entit umožňují dotazům GraphQL procházet související entity, což umožňuje komplexní datové obrazce jediným dotazem. Například:
{
books {
items {
id
title
authors {
items {
first_name
last_name
}
}
}
}
}
Aby toho lze dosáhnout, je potřeba DAB sdělit, jak entity souvisejí prostřednictvím oddílu relationships v konfiguračním souboru.
Konfigurace
Definování vztahu mezi entitami:
-
relationshipsPoužijte objekt uvnitř konfigurace entity. -
target.entityZadejte název. - Nastavit
cardinalityjako"one"nebo"many". - Volitelně zadejte
source.fieldsatarget.fields. - Použijte
linking.objectpři modelování vztahů mnoha k mnoha bez zobrazení tabulky spojení.
Příklad rozhraní příkazového řádku
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"
Příklad konfigurace
"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" ]
}
}
}
Jedno ke mnoha
- Použijte kardinalitu
"many". - Příklad: A
Seriesmá mnohoBooks. - Systém DAB může odvodit pole, pokud existuje cizí klíč.
dab update Series \
--relationship books \
--target.entity Book \
--cardinality many
Mnoho-na-jeden
- Použijte kardinalitu
"one". - Příklad: A
Bookpatří do jednohoSeries.
dab update Book \
--relationship series \
--target.entity Series \
--cardinality one
mnoho-na-mnoho (propojovací objekt)
- Použijte tabulku spojení, která není vystavená v GraphQL.
- Definujte propojení polí ze zdroje na cíl prostřednictvím tabulky spojení.
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"
M:N (explicitní spojovací entita)
- Vystavení tabulky spojení jako objektu GraphQL
- Definujte relace u všech tří entit.
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"
Reciproční vztahy
Chcete-li povolit navigaci v obou směrech (například od Book do Author a od Author do Book), definujte na cílové entitě druhou relaci, která obrátí zdrojová a cílová pole.
Příklad
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"
Tato dvojice odpovídajících vztahů Book a Author umožňuje symetrické procházení v GraphQL.
{
authors {
items {
first_name
books {
items {
title
}
}
}
}
}
Podpora GraphQL
- Související pole se zobrazují jako vnořené objekty.
- Kardinalita určuje, zda je vrácen seznam nebo jeden objekt.
- Názvy a pole typu GraphQL odpovídají názvům konfigurace.
Omezení
- Relace vyžadují, aby entity existovaly ve stejném konfiguračním souboru.
- Podporuje se pouze jednoskoková navigace.
- Cykly a hluboké vnoření nejsou optimalizovány.
- REST nepodporuje relace (pouze GraphQL).