Heap.GenericLink

Объявляет поле-ссылку на запись в любой heap-таблице без привязки ко конкретной таблице.

"Младший брат" Heap.RefLink.

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

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

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

import { Heap } from '@app/heap'
Heap.GenericLink(options)"

Аргументы

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

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

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

JSON-схема для array-поля с двумя элементами, первый - строка с type таблицы, второй - строка с уникальным идентификатором записи.

Примеры

Запись ссылок на разные таблицы в одно GenericLink поле и фильтрация по типу объекта, на который ссылаемся
import { deals } from '@someAccount/deals'

const products = Heap.Table('products', {})
const issues = Heap.Table('issues', {
  source: Heap.GenericLink(),
})

const product1 = await products.create(ctx, {})

await projects.create(ctx, { source: product1 })
await projects.create(ctx, {
  source: await deals.findOneBy(ctx, { name: 'test' } ),
})
const productIssues = await issues.findBy(ctx, {
  source: { type: products.type }
})

❤️ Made with love on Chatium

ООО "Чатиум"

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