Объявляет поле-ссылку на другую запись в 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
}
Объект с дополнительными необязательными параметрами поля.
'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),
})