Проекция возвращает выбранные данные существующей сущности без новой таблицы. Например, ArticleCard может объединить название статьи, её раздел и ограниченный список тегов. Создание, изменение и удаление записей через такую сущность не поддерживаются.
Создание и просмотр проекции
admingen-cli --path ./docs-demo projection add ArticleCard \
--source Article --module content --get=true --list=true \
--field id --field title
admingen-cli --path ./docs-demo --output json projection show ArticleCard
--source должен ссылаться на persistent-сущность с одним первичным ключом. Повторяйте --field для каждого поля; формат field:alias меняет только имя в ответе. Исходное поле не переименовывается.
Добавление раздела и коллекции тегов
Если связи Article.section и Article.tags уже есть, включите их в ответ:
admingen-cli --path ./docs-demo projection relation add ArticleCard section \
--as category --field id --field title
admingen-cli --path ./docs-demo projection relation add ArticleCard tags \
--field id --field title --default-limit 5 --max-limit 20 \
--order-by title --order-direction asc
Для hasMany/manyToMany задайте согласованные лимиты и порядок. Лимит ограничивает вложенный список, поэтому ответ не обязательно содержит все связанные записи. Обратное представление использует существующего владельца отношения и не создаёт нового.
Изменение выбранных данных
admingen-cli --path ./docs-demo projection field update ArticleCard title --as heading
admingen-cli --path ./docs-demo projection relation field add ArticleCard section slug
admingen-cli --path ./docs-demo projection relation update ArticleCard tags --default-limit 10
--field у add задаёт начальный состав. Далее используйте вложенные field add/update/delete. --as= убирает псевдоним. --clear-collection допустим только для вида отношения, который может существовать без collection.
projection update меняет источник, модуль и операции чтения. После смены источника проверьте всю выборку. projection delete удаляет её определение из модели. Общие права можно менять через entity update, но состав source/select задаётся командами projection.
Что проверяет генератор
Повторяющиеся выходные имена, отсутствующие исходные поля и несогласованные лимиты вызывают ошибку. Не поддерживаются запись во вложенные данные, произвольное расширение ответа и проекция из проекции.
После изменения состава проверьте клиентов API и выполните Generate. В системе администрирования проекция остаётся списком и карточкой для чтения.
Команды
| Команда | Вызов |
|---|---|
projection |
admingen-cli projection [command] |
projection add |
admingen-cli projection add <projection-name> [flags] |
projection delete |
admingen-cli projection delete <projection-name> [flags] |
projection field |
admingen-cli projection field [command] |
projection relation |
admingen-cli projection relation [command] |
projection show |
admingen-cli projection show <projection-name> [flags] |
projection update |
admingen-cli projection update <projection-name> [flags] |
projection field add |
admingen-cli projection field add <projection-name> <field-name> [flags] |
projection field delete |
admingen-cli projection field delete <projection-name> <field-name> [flags] |
projection field update |
admingen-cli projection field update <projection-name> <field-name> [flags] |
projection relation add |
admingen-cli projection relation add <projection-name> <relation-name> [flags] |
projection relation delete |
admingen-cli projection relation delete <projection-name> <relation-name> [flags] |
projection relation field |
admingen-cli projection relation field [command] |
projection relation update |
admingen-cli projection relation update <projection-name> <relation-name> [flags] |
projection relation field add |
admingen-cli projection relation field add <projection-name> <relation-name> <field-name> [flags] |
projection relation field delete |
admingen-cli projection relation field delete <projection-name> <relation-name> <field-name> [flags] |
projection relation field update |
admingen-cli projection relation field update <projection-name> <relation-name> <field-name> [flags] |
Общие параметры смотрите в основах CLI. Имена в угловых скобках замените своими. В update свойства, для которых не передан флаг, сохраняются.
Параметры выборки и коллекций
| Параметр | Где применяется | По умолчанию | Смысл |
|---|---|---|---|
--field VALUE |
projection add, projection relation add |
пустой список | Начальное выбранное поле: field или field:alias. Флаг повторяется; последующие изменения — отдельными командами field. |
--get |
projection add, projection update |
projection add: true; projection update: false |
Включить чтение проекции по идентификатору. |
--list |
projection add, projection update |
false | В entity — список UI; в projection — чтение списка корневых записей. |
--module VALUE |
projection add, projection update |
пустая строка | Для init — путь Go-модуля; для сущности/проекции — существующий модуль навигации. В update означает перенос. |
--source VALUE |
projection add, projection update |
пустая строка | Сущность с хранением, из которой читает проекция. |
--as VALUE |
projection field add, projection field update, projection relation add, projection relation update, projection relation field add, projection relation field update |
пустая строка | Выходное имя выбранного поля/отношения; --as= очищает alias. |
--new-field VALUE |
projection field update, projection relation field update |
пустая строка | Новое исходное поле выбранного элемента проекции. |
--default-limit VALUE |
projection relation add, projection relation update |
0 | Количество элементов вложенной коллекции по умолчанию. |
--max-limit VALUE |
projection relation add, projection relation update |
0 | Максимум элементов вложенной коллекции. |
--order-by VALUE |
projection relation add, projection relation update |
пустая строка | Поле порядка по умолчанию вложенной коллекции. |
--order-direction VALUE |
projection relation add, projection relation update |
"asc" | Направление порядка по умолчанию: asc или desc. |
--clear-collection |
projection relation update |
false | Убрать настройки коллекции, только если итоговый relation допускает это. |
--new-relation VALUE |
projection relation update |
пустая строка | Новое исходное отношение выбранного элемента проекции. |
Поиск, фильтрация и сортировка
У каждого выбранного scalar возможности задаются отдельно от persistent-источника. Флаги одинаковы для projection field add/update и projection relation field add/update:
| Флаг | Значение при добавлении | Результат |
|---|---|---|
--searchable |
false | Поиск по выбранному string/text. |
--filterable |
false | Разрешённые типизированные фильтры. |
--sortable |
false | Пользовательская сортировка по полю. |
admingen-cli --path ./docs-demo projection field update ArticleCard title --searchable --sortable --filterable
admingen-cli --path ./docs-demo projection relation field update ArticleCard section title --filterable --sortable
admingen-cli --path ./docs-demo projection relation field update ArticleCard tags title --searchable --sortable
В командах используйте исходные имена поля и связи, а не выходные alias. Для отключения передайте =false.
Поле belongsTo участвует в отборе и сортировке корневых записей. Поле hasMany/manyToMany управляет элементами внутри коллекции. Например, сортировка тегов меняет порядок тегов у каждой статьи, но не порядок самих статей.
В запросах API, напротив, используется выходной alias: tagsSearches, tagsFilters, tagsSort, tagsOrder, tagsLimit, tagsOffset. Лимиты и total считаются отдельно для каждого родителя. Если элементы отфильтрованы полностью, родитель остаётся с пустыми items. Подробности — формат API.
Обязательные условия выдачи
Права list/get настраиваются через entity access, состав ответа — через projection. Для дерева серверных readRule отдельного CLI-флага нет: настройте корень и коллекции в Access UI или манифесте.
Правило исходной persistent-сущности не наследуется автоматически. Пример независимых условий PageBlock, Page и items разобран в правилах доступа.