Таблица ORM в Bitrix D7: добавить и удалить столбец через SQL
Зачем отдельно трогать таблицу
Класс DataManager в D7 описывает колонку в getMap(), но платформа сама по себе не применяет DDL к продакшен-БД. После добавления записи поля на PHP нужно один раз привести схему MySQL к тому же набору имён и типов — например установочным модулем, обёрткой миграции или аккуратным SQL под свою политику релиза.
Снять снимок схемы
Имя пользователя и базы уже задаётся соединением; для проверки структуры достаточно стандартного запроса (подставьте реальный префикс и суффикс таблицы вашей ORM-сущности):
SHOW COLUMNS FROM b_loyalty_event_queue;По столбцу Field видите имя поля в БД; по Type, Null и ключам можно свериться с тем, что ожидалось для выборки и индексов.
Убрать столбец
Не забудьте заранее отвязать от него свойства класса на PHP и любые связи зависимого кода, иначе запросы к ORM упадут сразу после выкладки DDL:
ALTER TABLE b_loyalty_event_queue DROP COLUMN legacy_batch_ref;Добавить столбец под типы полей карты ORM
Ниже — практическая привязка к типичным классам из Bitrix\Main\ORM\Fields; длины varchar и ограничения NULL подстройте под бизнес-данные проекта:
StringFieldобычно мапится наVARCHARподходящей длины.TextField—TEXT.BooleanFieldв ядре чаще хранится как символический флаг, поэтому подходит ограниченныйVARCHARс запретомNULL, если в коде нет промежуточного состояния.FloatField—DOUBLEлибоDECIMAL, когда необходимо фиксированное число знаков при выгрузках.IntegerField—INT; при нужде добавьтеUNSIGNEDна уровне домена счётчиков.DatetimeField—DATETIME.
Разовые примеры добавления столбца к нашей условной таблице можно свернуть так:
ALTER TABLE b_loyalty_event_queue ADD COLUMN campaign_slug VARCHAR(255) NOT NULL DEFAULT '';
ALTER TABLE b_loyalty_event_queue ADD COLUMN memo_body TEXT;
ALTER TABLE b_loyalty_event_queue ADD COLUMN hot_flag VARCHAR(1) NOT NULL DEFAULT 'N';
ALTER TABLE b_loyalty_event_queue ADD COLUMN price_delta DOUBLE NULL;
ALTER TABLE b_loyalty_event_queue ADD COLUMN redeem_count INT UNSIGNED NULL;
ALTER TABLE b_loyalty_event_queue ADD COLUMN synced_at DATETIME NULL;Не стоит копировать длины и флаги NULL без проверки: для перечислимых полей возможно понадобится отдельный справочник или свойство элементов инфоблока вместо «сырой» строки.
Переименовать или сменить тип
Когда колонку нужно переосмыслить и одновременно поменять имя или тип данных, достаточно одной операции:
ALTER TABLE b_loyalty_event_queue CHANGE COLUMN old_bonus_rate rebate_rate DOUBLE NULL;Третий и последний аргументы в синтаксисе CHANGE — новое системное имя и целевой тип столбца, во многих случаях совпадающий с тем, что вы уже использовали при добавлении аналогичного поля.
После применения SQL
- Обновите
getMap()и любые упоминания старого идентификатора в фильтрах и связях. - Очистите кеш приложения там, где ORM результат кешируется вручную.
- На высоких нагрузках оцените влияние блокирующего
ALTERпод своим движком и размер таблицы — иногда DDL переносят в окно обслуживания.
Где искать связанные подсказки
Общие приёмы работы с базой данных в проекте на «1С‑Битрикс» см. в заметках о модуле database и выборках вокруг вашего контура задач.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии