Middle ORM D7 Обязательно

Концепция ORM: DataManager и сущность

ORM D7 строится на Table-классах, наследующих DataManager и определяющих имя таблицы (getTableName()) и карту полей (getMap()). Структура сущности компилируется ядром в объект Entity, объединяя скалярные поля, связи и пользовательские поля UF_* для унифицированной работы через статические методы.

Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.

Что нужно понимать

  • 1
    DataManager
  • 2
    Entity (сущность)
  • 3
    Table-класс

Материалы

Официальная документация

Проверь себя

add() падает с «Table b_vendor_shop_orderlog doesn't exist», хотя таблица в базе создана. Где искать?

В отсутствующем getTableName(). Без него ORM собирает имя таблицы из namespace и имени класса, а не берёт вашу таблицу. Метод должен возвращать реальное имя.

Чем getMap() отличается от getEntity()->getFields() и когда важна разница?

getMap() — первичная конфигурация, которую вы написали. Entity компилируется из неё один раз на хит и дополняется: пользовательскими полями через getUfId(), runtime-полями запроса. Реальный список полей — у Entity, а не у getMap().

Заказчик попросил хранить возраст записи в днях, вы завели ExpressionField, и update() бросил исключение. Почему?

ExpressionField — виртуальное поле, SQL-выражение только для выборки, фильтра и сортировки. Колонки в таблице нет, записать в него нельзя. Если значение нужно хранить, это обычное поле и агент на пересчёт.

Зачем в ядре у одной таблицы b_iblock_element несколько Table-классов?

Чтобы сегментировать одну таблицу: setDefaultScope() добавляет условие к каждому запросу класса, и Element4Table видит только IBLOCK_ID=4. Так работают классы Element{ApiCode}Table инфоблоков.

Не сходится?

Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.

Знаете материал лучше?

Предложите ссылку: после проверки она появится в этом разделе.

Войти, чтобы предложить
Поделиться в Telegram
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…
Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти