Свои таблицы на ORM - сущности, запросы, миграции
Не всё ложится в инфоблоки: журналы, очереди, служебные связи удобнее держать в своей таблице. Здесь собраны решения по работе с ними.
Что общего у этих задач
Таблица описывается классом сущности. Имя таблицы и список полей живут в коде, а не в базе, и это описание становится единственным источником правды о структуре.
Своя таблица - это своя ответственность. Индексы, миграции и чистка старых записей ложатся на автора, платформа за них не отвечает.
Данные без интерфейса живут только в коде. Инфоблок даёт готовую форму правки и права, своя таблица не даёт ничего, и это осознанный размен на скорость и свободу структуры.
Решения подтемы
-
Своя таблица на ORM: сущность, запросы, изменение структуры - описание полей, создание при установке, запросы и миграции.
-
Связи между таблицами ORM: ссылки, выборка, удаление - выборка связанных полей через точку.
-
Объекты ORM: выборка объектами, ленивая загрузка, сохранение - объекты и коллекции, подгрузка полей, запись и удаление.
-
Где хранить данные: инфоблок, highload-блок или своя таблица - критерии выбора, объёмы, права и цена переезда.
-
Транзакции при записи: откат, границы, что не откатится - границы и откат по ошибке.
-
Своя сущность от таблицы до админки: слои, права, интерфейс - три слоя и права.
-
Переезд с самописной таблицы на инфоблоки - карта полей, перенос порциями, редиректы и сверка.
-
Внешняя база данных: второе соединение, запросы, ORM - соединение в настройках, сущность на чужой таблице, кэш.
-
Выборка ORM возвращает не то: разбор причин - оператор фильтра, связи и ограничение, поля объекта, результат записи.
-
Код, совместимый с PostgreSQL: кавычки, функции, индексы - кавычки и регистр, экранирование, функции базы, индексы.
-
История изменений своей таблицы: версии, автор, откат - таблица версий, автор правки, откат, чистка.
Частые вопросы
Когда своя таблица лучше инфоблока?
Когда данных много, они однотипные и не нужны в интерфейсе: журналы, очереди, связи. Инфоблок в таких случаях только замедляет.
Кто создаёт таблицу на боевом сайте?
Класс установки модуля. Ручное создание таблицы означает, что на новом стенде её не будет.
Нужны ли индексы?
Обязательно, по полям отбора и сортировки. Таблица без индексов работает быстро ровно до первой сотни тысяч строк.
Как менять структуру потом?
Скриптом обновления модуля, который меняет и таблицу, и описание сущности. Правка только в коде оставляет базу прежней.
Связанные темы
- Ядро D7: ORM - устройство слоя данных
- Свой модуль: структура, установка, автозагрузка - где живёт класс сущности
- Highload-блоки - готовое хранилище для справочников
- База данных: продвинутое - индексы и планы запросов
- Раздел Ядро D7