Une relation joint deux collections et possède les liens entre leurs entrées : l’auteur d’un article, les chapitres d’une leçon, les produits associés d’un produit. Un champ reference voit une relation depuis une extrémité et donne aux éditeurs un sélecteur pour celle-ci.
Parce que la relation possède les liens, ses deux collections peuvent modifier un même ensemble. Le slug, le nom de chaque côté et la limite du nombre d’entrées que chaque côté peut lier appartiennent à la relation, de sorte qu’un champ sur posts et un champ sur authors ne peuvent pas être en désaccord sur les mêmes liens. EmDash stocke les liens en dehors des deux tables de collection, indexés par le groupe de traduction de chaque entrée, de sorte que chaque traduction d’une entrée partage une sélection.
Les extrémités sont le côté qui lie et le côté lié. Dans une relation de posts vers authors, un champ sur posts choisit les auteurs auxquels un article se lie, et un champ sur authors liste les articles qui s’y lient.
Ajouter une relation
Les deux types de contenu doivent exister avant de pouvoir les joindre.
-
Ouvrez Content Types dans l’admin, puis Relations.
-
Cliquez sur New Relation, puis choisissez les deux types de contenu. Links from est le côté qui choisit ; Links to est le côté qui est choisi.
-
Sous Roles, nommez chaque côté au pluriel et au singulier. Les noms sont préremplis à partir des types de contenu et peuvent être modifiés. Un champ de référence prend le nom du côté depuis lequel il choisit.
-
Vérifiez le Slug. Il suit les noms, et les champs de référence le stockent.
-
Sous How many, définissez la limite de chaque côté : One, Any number, ou At most avec un Maximum que vous indiquez. Les deux champs liés à la relation partagent ces limites.
-
Créez la relation.
Les deux types de contenu et le slug sont fixés une fois que la relation existe. Chaque lien est indexé par la relation, donc déplacer une extrémité pointerait des liens stockés vers du contenu du mauvais type. Pour joindre d’autres types de contenu, créez une autre relation.
Les noms et les limites restent modifiables. Baisser une limite laisse les liens existants en place, et enregistrer une entrée dont la sélection dépasse la nouvelle limite est refusé jusqu’à ce que la sélection convienne.
La propre page d’un type de contenu liste les relations dont il est une extrémité, dans un panneau Relations sous ses champs. Nouveau, modifier et supprimer fonctionnent de la même façon là-bas.
Ajouter un champ de référence
-
Ouvrez le type de contenu sous Content Types et cliquez sur Add Field.
-
Choisissez Reference.
-
Sélectionnez la relation à laquelle se lier. Le dernier choix, Create relation, ouvre le formulaire de relation dans le même dialogue et revient avec la nouvelle relation sélectionnée ; sur un site sans relations encore, c’est le seul choix.
-
Pour une relation dont les deux extrémités sont le même type de contenu, définissez This field picks sur Entries this one links to ou Entries that link to this one. Partout ailleurs, le propre type de contenu du champ décide de l’extrémité, et le champ choisit des entrées de l’autre.
-
Vérifiez le libellé et le slug. Le libellé vient du côté que le champ choisit, et renommer le champ plus tard renomme ce côté de la relation.
-
Ajoutez le champ.
Une relation prend un champ par extrémité, donc un second champ sur la même extrémité est refusé : deux sélecteurs écrivant les mêmes liens n’auraient pas de résultat défini. Pour laisser les deux types de contenu modifier un même ensemble de liens, ajoutez un champ à chaque extrémité de la même relation.
Un champ de référence ne peut pas être marqué searchable ou indexed, car il ne stocke aucune colonne propre. Les filtres de listes de contenu et la recherche du site ne le couvrent pas.
Choisir des entrées dans l’éditeur
Le champ s’affiche comme un sélecteur dans l’éditeur d’entrées. Add reference ouvre une recherche sur le type de contenu référencé ; un champ limité à une entrée propose Replace reference une fois qu’il en contient une. Chaque entrée choisie peut être ouverte dans un nouvel onglet, retirée, ou, sur un champ qui choisit le côté lié, déplacée vers le haut et le bas pour fixer l’ordre dans lequel un modèle les lit. Un champ qui choisit le côté qui lie liste les entrées qui se lient à celle-ci, sans ordre propre.
Les sélections s’enregistrent avec l’entrée, en une requête. Sur une collection qui conserve des révisions, modifier une sélection sur une entrée publiée la met en scène dans le brouillon avec les autres modifications en attente de l’entrée : elle devient live lorsque l’entrée est publiée, et est écartée avec le brouillon. Un aperçu de l’entrée montre la sélection mise en scène.
Voir ce qui se lie à une entrée
Ajoutez un champ de référence à l’autre extrémité de la relation. Un champ qui choisit le côté qui lie liste les entrées qui se lient à celle-ci, de sorte qu’un auteur qui modifie une page voit les articles qui pointent vers elle, et peut modifier cet ensemble depuis l’une ou l’autre extrémité.
Lire les liens dans un modèle
Les champs de référence ne font pas partie du data d’une entrée. Nommez les champs qu’une page rend dans l’option references, et chacun revient comme une page d’entrées :
---
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>}
Lire les champs de référence couvre la pagination, le comportement d’aperçu, les types générés et ce que chaque appel coûte en requêtes.
Déclarer une relation dans un seed
Un fichier seed déclare les relations dans un tableau relations de premier niveau, et un champ de référence s’y lie par slug. Un champ qui nomme une targetCollection à la place a une relation créée pour lui. emdash export-seed émet les relations d’un site, et --with-content émet les liens de chaque entrée, de sorte que les sélections d’un site survivent à un export et à une réapplication.
Supprimer un champ ou une relation
Supprimer un champ de référence propose de supprimer aussi la relation qu’il utilise, et nomme ce que cela emporte : la relation, les liens stockés sous elle, et le champ sur l’autre type de contenu. Décochez la case pour garder la relation et ses liens, par exemple lorsque le champ à l’autre extrémité les utilise encore.
Supprimer une relation retire toujours ses liens et les champs qui y sont liés. Supprimer un type de contenu retire toute relation dont il est une extrémité, ainsi que les champs sur les autres types de contenu qui les voient ; la confirmation les liste.
Lier un champ qui n’a pas de relation
Un champ de référence sans relation détient un ID d’entrée dans une zone de texte au lieu de choisir des entrées. Donnez-lui une relation pour en faire un sélecteur.
-
Ouvrez le type de contenu sous Content Types et cliquez sur l’action d’édition sur la ligne du champ.
-
Choisissez une Referenced collection, et activez Allow multiple references si le champ doit détenir plus d’une entrée.
-
Enregistrez le champ.
EmDash crée une relation nommée d’après le champ et son type de contenu, copie les ID d’entrée que la colonne du champ détient en tant que liens, et efface les drapeaux searchable et indexed du champ, de sorte que les filtres de listes de contenu et la recherche du site cessent de le couvrir. La relation ne met aucune limite au nombre d’entrées qui se lient dans l’autre sens. La colonne est laissée en place et cesse d’être écrite ; modifiez la relation sur la page Relations pour renommer ses côtés ou définir la seconde limite.
Un site mis à jour depuis une version antérieure peut contenir des champs dans cet état. Voir Les champs de référence se lient aux relations pour ce que la mise à jour lie et ce qu’elle vous laisse.