Heap.RefLink

Объявляет поле-ссылку на другую запись в heap-таблице (другой или своей). Аналог foreign key в реляционных БД.

Это нестандартный тип в JSON-схеме. Он хранится в БД в виде строкового идентификатора записи, на которую ссылаемся, а в рантайме предствален экземпляром специального класса RefLink.

Подробнее о работе с ссылками можно почитать в соответствующем разделе руководства.

Применение / сигнатура

import { Heap } from '@app/heap'
Heap.RefLink(tableNameOrRepo, options)

При вызове Heap.RefLink обязательно напрямую использовать объект Heap из импорта в этом модуле, то есть нельзя сделать:

import { Heap } from '@app/heap'
const RenamedHeap = Heap
RenamedHeap.RefLink(...)

Аргументы

  • tableNameOrRepo: HeapTableRepo|string *
    Целевая таблица, на которую "смотрит" ссылка. Может быть задана как название таблицы, либо непосредственно репозиторий целевой heap-таблицы:

    • HeapTableRepo: HeapTableRepo
      Репозиторий таблицы (результат Heap.Table), на которую ссылаемся.

      Это рекомендованный и самый эффективный способ. Он работает во всех случаях, кроме рекурсивных ссылок.

    • string
      Название таблицы (первый аргумент Heap.Table), на которую ссылаемся. Этот способ доступен только для "локальных" (объявленных в том же аккаунте) целевых таблиц. Его следует применять только в случае рекурсивных ссылок (когда таблица ссылается на саму себя либо две таблицы ссылаются друг на друга), поскольку в этом случае ссылку через репозиторий использовать не получится.

      Данный способ доступен и для нерекурсивных случаев, но его не рекомендуется использовать без необходимости, поскольку он немного менее производителен, чем объявление ссылки через репозиторий целевой таблицы.

  • options: {onDelete}
    Объект с дополнительными необязательными параметрами поля.

    • onDelete: 'restrict' | 'none' (по умолчанию - 'restrict')
      Определяет поведение контроля целостности для этого поля, отвечая на вопрос: что делать, когда запись, на которую ссылается это поле, удаляется.
      • 'restrict' - запретить удаление. Операция delete завершится ошибкой.
      • 'none' - (не рекомендуется) игнорировать. Запись удалится, а в этом поле останется ссылка на несуществующую запись.

    В отличие от большинства других типов полей, ссылки не поддерживают значения по умолчанию.

Возвращаемое значение

JSON-схема для string-поля (сохраняется только строковой идентификатор записи, на которую ссылаемся).

Примеры

Простая ссылка, объявленная через репозиторий
const projects = Heap.Table('projects', {
  name: Heap.String(),
})
const issues = Heap.Table('issues', {
  project: Heap.RefLink(projects),
})
const project1 = await projects.create(ctx, { name: 'project 1' })
const issue1 = await projects.create(ctx, { project: project1 })
Дерево, ссылка "на себя"
const folders = Heap.Table('folders', {
  name: Heap.String(),
  parent: Heap.Nullable(Heap.RefLink('folders')),
})
Ссылка на импортированную таблицу
import { projects } from '@someAccount/projects'
const issues = Heap.Table('issues', {
  project: Heap.RefLink(projects),
})

❤️ Made with love on Chatium

ООО "Чатиум"

Информация о компании