get
Метод get получает на вход условия выборки и возвращает набор записей в массиве rows (res.data.rows). Работает через кэш.
Входные параметры. Интерфейс IAPIQueryParams
columns
columns?: string[]
Массив строк с перечислением колонок, которые должны быть в результирующем ответе. Система проверит наличие таких полей в профайле и не позволит запросить несуществующее поле или подставить SQL-выражение.
- Если не передавать, будут возвращены все поля, для которых в профайле Класса или Клиентского Объекта установлен флаг
visible. - as: Имя поля может быть указано с использованием
as, тогда результат будет возвращен в колонку с указанным именем.- Пример:
columns: ['user_id as id']. Полеuser_idбудет возвращено какid. Это полезно, когда запрос формируется для использования в другом запросе (например, вwhereInSelect, который опирается наid).
- Пример:
where / param_where. Условия выборки
По умолчанию условия отсутствуют (применяется только limit по умолчанию).
- Для класса или клиентского объекта может быть определен
default_where, который накладывается на все запросы. where— это массив объектов условий (IOneWhere). Условие может быть либо непосредственным сравнением (поле, тип, значение), либо группой условий.
Интерфейс IOneWhere:
export interface IOneWhere {
key?: string,
type?: string
val1?: any
val2?: any
group?: string
comparisonType?: string
is_role?: boolean,
role_group?: string
name?: string // info
isGroup?: boolean // if set, items must be an array
items?: IOneWhere[]
isOr?: boolean // Определяет тип сравнения с предыдущим элементом (OR для всей группы)
binary?: boolean
s?: string // sql string for one where or for all items (if isGroup)
}
Функции-обертки:
Реализованы в \models\system\CoreClass\prepareWhere.ts. Они упрощают создание объектов IOneWhere.
whereEq,whereNotEq,whereMore,whereMoreEq,whereLess,whereLessEq: принимаютkeyиval1для стандартных сравнений (=,!=,>,>=,<,<=).whereBetween: принимаетkey,val1иval2. Преобразуется в>=и<=.whereIn,whereNotIn: принимаетkeyиval1(обычно массив). Если передан не массив, перенаправляет вwhereEq.whereInSelect,whereNotInSelect: принимаетkeyиval1(строка SQL видаselect id from ...). Используется в связке сprepareSQL. Блокируется при запросах с клиента из соображений безопасности.whereLike,whereStartLike,whereEndLike: сравнение видаLIKE(%val1%,val1%,%val1).- Группы:
groupOr,groupAnd. Массив условий по умолчанию соединяется черезAND.groupOrпозволяет объединить условия черезORи выделить их скобками.
Пример использования групп:
const res = await r.api(User, 'get', {
where: [
whereEq('gender_sysname', 'MALE'),
groupOr([
whereEq('firstname', 'Alex'),
whereEq('nickname', 'Alex')
])
]
})
if (res.code) return res
const users = res.data.rows
param_where
Устаревшая форма { [field: string]: any }. Тип сравнения всегда =. Не рекомендуется к использованию при наличии функций-оберток.
limit | page_no | offset
limit?: false | number: НакладываетLIMIT. По умолчанию 10000.falseотключает лимит.offset?: number: Смещение (по умолчанию 0).page_no?: number: Если передан,offsetвычисляется какpage_no * limit.
sort
sort?: { columns: string[], directions?: string[] } | string | false
Определяет сортировку. По умолчанию берется из профайла Класса (обычно id DESC).
prepareSQL
prepareSQL?: boolean
Если true, запрос не выполняется, а возвращается в виде строки SQL в res.data.sql. Это queryBuilder, учитывающий особенности ядра (join, профайлы, типы данных). Используется для последующей подстановки в whereInSelect.
countOnly
countOnly?: boolean
Возвращает только количество записей по заданным условиям (игнорируя limit) в res.data.count.
enableInheritValues
enableInheritValues: boolean
Для иерархических сущностей позволяет получать значения от родителей, если свое не установлено (поле должно иметь флаг is_inherit в профайле). Вместо значения возвращается объект IInheritedValue.
enableMultiValues
enableMultiValues: boolean
Для динамических полей (связь один-ко-многим).
false(по умолчанию): значения возвращаются строкой через сепаратор"- m | v -"(без кавычек и пробелов).true: значения возвращаются объектом{ values, valueColumnName }.
co_path___
Передается автоматически из клиентских компонентов. Используется для механизма динамических полей (например, характеристики товаров в зависимости от категории), чтобы ядро понимало контекст запроса и необходимые дополнительные поля.
group_by
group_by?: string | string[]
Определяет группировку по заданным полям. Обычно используется вместе со specColumns.
specColumns
specColumns?: { [alias: string]: string }
Позволяет указать SQL-выражения или функции агрегации (например, sum(amount)).
Важно: Параметр запрещен для запросов с клиента.
Выходные параметры. Интерфейс IAPIResponse / IError
В случае ошибки возвращается инстанс MyError или UserError.
Успешный ответ (res.data):
rows: Массив объектов записей. Типизируется автоматически созданными интерфейсами (например,IDealDataRow).additionalData:count: Количество вернувшихся записей (с учетомlimit).count_all: Всего записей по условиям (без учетаlimit).data_columns: Массив имен полей в порядке, определенном профайлом.additional_class_fields_profile: Информация о наследуемых полях.cFProfile(только на сервере): Профайлы каждого поля запрашиваемого класса.