Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Entitätsbeziehungen ermöglichen GraphQL-Abfragen das Durchlaufen verwandter Entitäten, wodurch komplexe Daten-Shapes mit einer einzelnen Abfrage ermöglicht werden. Beispiel:
{
books {
items {
id
title
authors {
items {
first_name
last_name
}
}
}
}
}
Um dies zu erreichen, muss DAB angewiesen werden, wie Entitäten über den relationships Abschnitt in der Konfigurationsdatei verknüpft sind.
Konfiguration
So definieren Sie eine Beziehung zwischen Entitäten:
- Verwenden Sie das
relationshipsObjekt innerhalb der Entitätskonfiguration. - Geben Sie den
target.entityNamen an. - Festlegen
cardinalityals"one"oder"many". - Optional angeben
source.fieldsundtarget.fields. - Verwenden Sie
linking.objectbeim Modellieren von m:n-Beziehungen, ohne die Verknüpfungstabelle freizugeben.
CLI-Beispiel
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"
Konfigurationsbeispiel
"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" ]
}
}
}
Eine zu Vielen
- Verwenden Sie die Kardinalität
"many". - Beispiel: A
Serieshat vieleBooks. - DAB kann Felder ableiten, wenn ein Fremdschlüssel vorhanden ist.
dab update Series \
--relationship books \
--target.entity Book \
--cardinality many
n:1
- Verwenden Sie Kardinalität
"one". - Beispiel: A
Bookgehört zu einemSeries.
dab update Book \
--relationship series \
--target.entity Series \
--cardinality one
Many-to-Many (Verknüpfungsobjekt)
- Verwenden Sie eine Verknüpfungstabelle, die in GraphQL nicht verfügbar gemacht wird.
- Definieren Sie verknüpfungsfelder von Quelle zu Ziel über die Verknüpfungstabelle.
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"
Many-to-Many (explizite Verknüpfungsentität)
- Machen Sie die Verknüpfungstabelle als GraphQL-Objekt verfügbar.
- Definieren Sie Beziehungen für alle drei Entitäten.
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"
Gegenseitige Beziehungen
Um die Navigation in beide Richtungen zuzulassen (z. B. von Book zu Author und von Author zu Book), definieren Sie eine zweite Beziehung für die Zielentität, die die Quell- und Zielfelder umkehrt.
Beispiel
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"
Dies paart sich mit der Book-Beziehung Author und ermöglicht die symmetrische Durchquerung in GraphQL.
{
authors {
items {
first_name
books {
items {
title
}
}
}
}
}
GraphQL-Unterstützung
- Verwandte Felder werden als geschachtelte Objekte angezeigt.
- Kardinalität bestimmt, ob eine Liste oder ein einzelnes Objekt zurückgegeben wird.
- GraphQL-Typnamen und -Felder entsprechen Konfigurationsnamen.
Einschränkungen
- Beziehungen erfordern, dass Entitäten in derselben Konfigurationsdatei vorhanden sind.
- Nur eine einzelne Sprungnavigation wird unterstützt.
- Zyklen und tiefe Schachtelungen sind nicht optimiert.
- REST unterstützt keine Beziehungen (nur GraphQL).