Relationen

Auf dieser Seite

Eine Relation verbindet zwei Collections und besitzt die Verknüpfungen zwischen ihren Einträgen: der Autor eines Beitrags, die Kapitel einer Lektion, verwandte Produkte eines Produkts. Ein reference-Feld betrachtet eine Relation von einem Ende und gibt Redakteuren einen Auswahldialog dafür.

Weil die Relation die Verknüpfungen besitzt, können beide ihrer Collections denselben Satz bearbeiten. Der Slug, der Name, unter dem jede Seite bekannt ist, und das Limit, wie viele Einträge jede Seite verknüpfen darf, gehören zur Relation, sodass ein Feld auf Beiträgen und ein Feld auf Autoren nicht über dieselben Verknüpfungen uneinig sein können. EmDash speichert die Verknüpfungen außerhalb beider Collection-Tabellen, verschlüsselt nach der Übersetzungsgruppe jedes Eintrags, sodass jede Übersetzung eines Eintrags dieselbe Auswahl teilt.

Die Enden sind die verknüpfende und die verknüpfte Seite. In einer Relation von Beiträgen zu Autoren wählt ein Feld auf Beiträgen die Autoren, die ein Beitrag verknüpft, und ein Feld auf Autoren listet die Beiträge, die darauf verweisen.

Eine Relation hinzufügen

Beide Inhaltstypen müssen existieren, bevor Sie sie verbinden können.

  1. Öffnen Sie Content Types im Admin und dann Relations.

  2. Klicken Sie auf New Relation und wählen Sie die beiden Inhaltstypen. Links from ist die Seite, die auswählt; Links to ist die Seite, die ausgewählt wird.

  3. Unter Roles benennen Sie jede Seite im Plural und Singular. Die Namen werden aus den Inhaltstypen vorausgefüllt und können bearbeitet werden. Ein Referenzfeld übernimmt den Namen der Seite, aus der es auswählt.

  4. Prüfen Sie den Slug. Er folgt den Namen, und Referenzfelder speichern ihn.

  5. Unter How many setzen Sie das Limit jeder Seite: One, Any number oder At most mit einem Maximum, das Sie angeben. Beide an die Relation gebundenen Felder teilen diese Limits.

  6. Erstellen Sie die Relation.

Die beiden Inhaltstypen und der Slug sind festgelegt, sobald die Relation existiert. Jede Verknüpfung ist über die Relation verschlüsselt, sodass das Verschieben eines Endes gespeicherte Verknüpfungen auf Inhalte des falschen Typs zeigen würde. Um andere Inhaltstypen zu verbinden, erstellen Sie eine weitere Relation.

Die Namen und Limits bleiben bearbeitbar. Das Senken eines Limits lässt bestehende Verknüpfungen bestehen, und das Speichern eines Eintrags, dessen Auswahl das neue Limit überschreitet, wird abgelehnt, bis die Auswahl passt.

Die eigene Seite eines Inhaltstyps listet die Relationen, an denen er ein Ende ist, in einem Relations-Panel unter seinen Feldern. Neu, Bearbeiten und Löschen funktionieren dort genauso.

Ein Referenzfeld hinzufügen

  1. Öffnen Sie den Inhaltstyp unter Content Types und klicken Sie auf Add Field.

  2. Wählen Sie Reference.

  3. Wählen Sie die Beziehung, an die gebunden werden soll. Die letzte Option, Create relation, öffnet das Beziehungsformular im selben Dialog und kehrt mit der neuen Beziehung ausgewählt zurück; auf einer Site ohne Relationen ist sie die einzige Option.

  4. Bei einer Beziehung, deren beide Enden derselbe Inhaltstyp sind, setzen Sie This field picks auf Entries this one links to oder Entries that link to this one. Überall sonst entscheidet der eigene Inhaltstyp des Feldes das Ende, und das Feld wählt Einträge vom anderen.

  5. Prüfen Sie Label und Slug. Das Label kommt von der Seite, die das Feld auswählt, und das spätere Umbenennen des Feldes benennt diese Seite der Beziehung um.

  6. Fügen Sie das Feld hinzu.

Eine Relation nimmt ein Feld pro Ende, daher wird ein zweites Feld über dasselbe Ende abgelehnt: Zwei Auswahlfelder, die dieselben Verknüpfungen schreiben, hätten kein definiertes Ergebnis. Damit beide Inhaltstypen denselben Satz Verknüpfungen bearbeiten können, fügen Sie an jedem Ende derselben Relation ein Feld hinzu.

Ein Referenzfeld kann nicht als durchsuchbar oder indexiert markiert werden, weil es keine eigene Spalte speichert. Filter in Inhaltslisten und die Site-Suche decken es nicht ab.

Einträge im Editor auswählen

Das Feld wird im Eintragseditor als Auswahl dargestellt. Add reference öffnet eine Suche über den referenzierten Inhaltstyp; ein auf einen Eintrag begrenztes Feld bietet Replace reference, sobald es einen hält. Jeder ausgewählte Eintrag kann in einem neuen Tab geöffnet, entfernt oder — bei einem Feld, das die verknüpfte Seite auswählt — nach oben und unten verschoben werden, um die Reihenfolge festzulegen, in der eine Vorlage sie liest. Ein Feld, das die verknüpfende Seite auswählt, listet die Einträge, die auf diesen verweisen; diese haben keine eigene Reihenfolge.

Auswahlungen werden mit dem Eintrag in einer Anfrage gespeichert. Bei einer Collection, die Revisionen behält, wird das Ändern einer Auswahl an einem veröffentlichten Eintrag zusammen mit den anderen ausstehenden Änderungen des Eintrags im Entwurf gestuft: Sie geht live, wenn der Eintrag veröffentlicht wird, und wird mit dem Entwurf verworfen. Eine Vorschau des Eintrags zeigt die gestufte Auswahl.

Sehen, was auf einen Eintrag verweist

Fügen Sie ein Referenzfeld am anderen Ende der Beziehung hinzu. Ein Feld, das die verknüpfende Seite auswählt, listet die Einträge, die auf diesen verweisen, sodass ein Autor, der eine Seite bearbeitet, die Beiträge sieht, die darauf zeigen, und diesen Satz von beiden Enden ändern kann.

Verknüpfungen in einer Vorlage lesen

Referenzfelder sind nicht Teil von data eines Eintrags. Nennen Sie die Felder, die eine Seite rendert, in der Option references, und jedes kommt als Seite von Einträgen zurück:

---
import { getEmDashEntry } from "emdash";

const { entry: post } = await getEmDashEntry("posts", Astro.params.slug, {
  references: { author: true },
});

const author = post?.references?.author.entries[0];
---

<h1>{post?.data.title}</h1>
{author && <p>By {author.data.name}</p>}

Referenzfelder lesen behandelt Paginierung, Vorschauverhalten, generierte Typen und was jeder Aufruf an Abfragen kostet.

Eine Relation in einem Seed deklarieren

Eine Seed-Datei deklariert Relationen in einem Top-Level-relations-Array, und ein Referenzfeld bindet sich per Slug an eine. Ein Feld, das stattdessen eine targetCollection nennt, erhält dafür eine Relation. emdash export-seed gibt die Relationen einer Site aus, und --with-content gibt die Verknüpfungen jedes Eintrags aus, sodass die Auswahlen einer Site einen Export und erneutes Anwenden überstehen.

Ein Feld oder eine Relation löschen

Das Löschen eines Referenzfeldes bietet an, auch die verwendete Beziehung zu löschen, und nennt, was das mitnimmt: die Beziehung, die darunter gespeicherten Verknüpfungen und das Feld auf dem anderen Inhaltstyp. Deaktivieren Sie das Kontrollkästchen, um die Beziehung und ihre Verknüpfungen zu behalten, zum Beispiel wenn das Feld am anderen Ende sie noch nutzt.

Das Löschen einer Beziehung entfernt immer ihre Verknüpfungen und die daran gebundenen Felder. Das Löschen eines Inhaltstyps entfernt jede Beziehung, an der er ein Ende ist, zusammen mit den Feldern auf den anderen Inhaltstypen, die sie betrachten; die Bestätigung listet sie auf.

Ein Feld ohne Relation binden

Ein Referenzfeld ohne Relation hält eine Eintrags-ID in einem Textfeld, statt Einträge auszuwählen. Geben Sie ihm eine Relation, um es in einen Auswahl dialog zu verwandeln.

  1. Öffnen Sie den Inhaltstyp unter Content Types und klicken Sie auf die Bearbeitungsaktion in der Zeile des Feldes.

  2. Wählen Sie eine Referenced collection und setzen Sie Allow multiple references, wenn das Feld mehr als einen Eintrag halten soll.

  3. Speichern Sie das Feld.

EmDash erstellt eine Relation, benannt nach dem Feld und seinem Inhaltstyp, kopiert die Eintrags-IDs, die die Spalte des Feldes hält, als Verknüpfungen und löscht die Flags durchsuchbar und indexiert des Feldes, sodass Filter in Inhaltslisten und die Site-Suche es nicht mehr abdecken. Die Relation setzt kein Limit, wie viele Einträge die andere Richtung zurückverknüpfen. Die Spalte bleibt bestehen und wird nicht mehr geschrieben; bearbeiten Sie die Relation auf der Seite Relations, um ihre Seiten umzubenennen oder das zweite Limit zu setzen.

Eine von einer früheren Version aktualisierte Site kann Felder in diesem Zustand halten. Siehe Referenzfelder binden an Relationen dafür, was das Update bindet und was es Ihnen überlässt.