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'- (не рекомендуется) игнорировать.
Запись удалится, а в этом поле останется ссылка на несуществующую запись.
В отличие от большинства других типов полей, ссылки не поддерживают значения по умолчанию.
- onDelete:
Возвращаемое значение
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),
})
