Relações

Nesta página

Uma relação une duas coleções e possui os vínculos entre suas entradas: o autor de um post, os capítulos de uma lição, os produtos relacionados de um produto. Um campo reference vê uma relação a partir de uma extremidade e dá aos editores um seletor para ela.

Como a relação possui os vínculos, ambas as coleções podem editar o mesmo conjunto. O slug, o nome de cada lado e o limite de quantas entradas cada lado pode vincular pertencem à relação, de modo que um campo em posts e um campo em authors não podem discordar sobre os mesmos vínculos. O EmDash armazena os vínculos fora de ambas as tabelas de coleção, indexados pelo grupo de tradução de cada entrada, de modo que cada tradução de uma entrada compartilha uma seleção.

As extremidades são o lado que vincula e o lado vinculado. Em uma relação de posts para authors, um campo em posts escolhe os autores aos quais um post se vincula, e um campo em authors lista os posts que se vinculam a ele.

Adicionar uma relação

Ambos os tipos de conteúdo devem existir antes de você poder uni-los.

  1. Abra Content Types no admin e depois Relations.

  2. Clique em New Relation e escolha os dois tipos de conteúdo. Links from é o lado que escolhe; Links to é o lado que é escolhido.

  3. Em Roles, nomeie cada lado no plural e no singular. Os nomes são preenchidos a partir dos tipos de conteúdo e podem ser editados. Um campo de referência toma o nome do lado do qual escolhe.

  4. Verifique o Slug. Ele segue os nomes, e os campos de referência o armazenam.

  5. Em How many, defina o limite de cada lado: One, Any number, ou At most com um Maximum que você informar. Ambos os campos vinculados à relação compartilham esses limites.

  6. Crie a relação.

Os dois tipos de conteúdo e o slug ficam fixos assim que a relação existe. Cada vínculo é indexado pela relação, então mover uma extremidade apontaria vínculos armazenados para conteúdo do tipo errado. Para unir tipos de conteúdo diferentes, crie outra relação.

Os nomes e os limites continuam editáveis. Baixar um limite deixa os vínculos existentes no lugar, e salvar uma entrada cuja seleção exceda o novo limite é recusado até que a seleção caiba.

A própria página de um tipo de conteúdo lista as relações das quais é uma extremidade, em um painel Relations sob seus campos. Novo, editar e excluir funcionam da mesma forma ali.

Adicionar um campo de referência

  1. Abra o tipo de conteúdo em Content Types e clique em Add Field.

  2. Escolha Reference.

  3. Selecione a relação à qual vincular. A última opção, Create relation, abre o formulário de relação no mesmo diálogo e retorna com a nova relação selecionada; em um site sem relações ainda, é a única opção.

  4. Em uma relação cujas duas extremidades são o mesmo tipo de conteúdo, defina This field picks como Entries this one links to ou Entries that link to this one. Em qualquer outro lugar, o próprio tipo de conteúdo do campo decide a extremidade, e o campo escolhe entradas do outro.

  5. Verifique o rótulo e o slug. O rótulo vem do lado que o campo escolhe, e renomear o campo depois renomeia esse lado da relação.

  6. Adicione o campo.

Uma relação aceita um campo por extremidade, então um segundo campo sobre a mesma extremidade é recusado: dois seletores escrevendo os mesmos vínculos não teriam um resultado definido. Para deixar ambos os tipos de conteúdo editarem um conjunto de vínculos, adicione um campo em cada extremidade da mesma relação.

Um campo de referência não pode ser marcado como searchable ou indexed, porque não armazena uma coluna própria. Filtros de listas de conteúdo e a busca do site não o cobrem.

Escolher entradas no editor

O campo é renderizado como um seletor no editor de entradas. Add reference abre uma busca sobre o tipo de conteúdo referenciado; um campo limitado a uma entrada oferece Replace reference assim que contém uma. Cada entrada escolhida pode ser aberta em uma nova aba, removida ou, em um campo que escolhe o lado vinculado, movida para cima e para baixo para definir a ordem em que um template as lê. Um campo que escolhe o lado que vincula lista as entradas que se vinculam a esta, sem uma ordem própria.

As seleções salvam com a entrada, em uma solicitação. Em uma coleção que mantém revisões, alterar uma seleção em uma entrada publicada a prepara no rascunho junto com as outras edições pendentes da entrada: ela entra no ar quando a entrada é publicada, e é descartada com o rascunho. Uma prévia da entrada mostra a seleção preparada.

Ver o que se vincula a uma entrada

Adicione um campo de referência na outra extremidade da relação. Um campo que escolhe o lado que vincula lista as entradas que se vinculam a esta, de modo que um autor editando uma página vê os posts que apontam para ela, e pode alterar esse conjunto de qualquer extremidade.

Ler vínculos em um template

Campos de referência não fazem parte do data de uma entrada. Nomeie os campos que uma página renderiza na opção references, e cada um volta como uma página de entradas:

---
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>}

Ler campos de referência cobre paginação, comportamento de prévia, tipos gerados e o custo de cada chamada em consultas.

Declarar uma relação em um seed

Um arquivo seed declara relações em um array relations de nível superior, e um campo de referência se vincula a uma por slug. Um campo que nomeia uma targetCollection em vez disso tem uma relação criada para ele. emdash export-seed emite as relações de um site, e --with-content emite os vínculos de cada entrada, de modo que as seleções de um site sobrevivem a um export e a uma reaplicação.

Excluir um campo ou uma relação

Excluir um campo de referência oferece excluir também a relação que usa, e nomeia o que isso leva: a relação, os vínculos armazenados sob ela e o campo no outro tipo de conteúdo. Desmarque a caixa para manter a relação e seus vínculos, por exemplo quando o campo na outra extremidade ainda os usa.

Excluir uma relação sempre remove seus vínculos e os campos vinculados a ela. Excluir um tipo de conteúdo remove toda relação da qual é uma extremidade, junto com os campos nos outros tipos de conteúdo que as veem; a confirmação os lista.

Vincular um campo que não tem relação

Um campo de referência sem relação guarda um ID de entrada em uma caixa de texto em vez de escolher entradas. Dê a ele uma relação para transformá-lo em um seletor.

  1. Abra o tipo de conteúdo em Content Types e clique na ação de editar na linha do campo.

  2. Escolha uma Referenced collection, e defina Allow multiple references se o campo deve guardar mais de uma entrada.

  3. Salve o campo.

O EmDash cria uma relação nomeada após o campo e seu tipo de conteúdo, copia os IDs de entrada que a coluna do campo guarda como vínculos, e limpa as flags searchable e indexed do campo, de modo que filtros de listas de conteúdo e a busca do site deixam de cobri-lo. A relação não coloca limite em quantas entradas se vinculam de volta pelo outro lado. A coluna é deixada no lugar e para de ser escrita; edite a relação na página Relations para renomear seus lados ou definir o segundo limite.

Um site atualizado de uma versão anterior pode ter campos nesse estado. Veja Campos de referência se vinculam a relações para o que a atualização vincula e o que deixa para você.