CRUD: add, update, delete и массовые операции
Операции add(), update() и delete() возвращают типизированный объект Result, ошибки которого обязательно проверять методом isSuccess() во избежание E_USER_WARNING в деструкторе. Для пакетных вставок используют addMulti() с контролем передачи флага отключения событий, а атомарные изменения счетчиков выполняются через SqlExpression.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
getList() — выборка
-
2
getById() — получение по ID
-
3
add() — добавление
-
4
update() — обновление
-
5
delete() — удаление
Материалы
Официальная документация
-
Выборка данных: раздел «Короткие вызовы» Новая дока
Материалы BXMax
Проверь себя
В логе прода тысячи E_USER_WARNING с текстом ошибок ORM, хотя код нигде их не выводит. Откуда они?
Из деструктора Bitrix Main ORM Data Result: если у результата есть ошибки и код ни разу не запросил их, __destruct() вызывает trigger_error с их текстом. Это сигнал о непроверенном isSuccess(), а не баг ядра.
update() вернул isSuccess() true, а запись в базе не изменилась. Почему?
update() не проверяет существование строки: UPDATE по несуществующему ключу — успешный запрос с нулём затронутых строк. Смотрите getAffectedRowsCount() у UpdateResult или читайте запись до обновления.
Заказчик жалуется, что после ночного импорта не отправились уведомления, которые вешались на OnAfterAdd. Где искать?
Во втором аргументе addMulti(). Импорт наверняка вызывал addMulti($rows, true), а true отключает события ORM для массовой вставки. Либо убрать флаг, либо отправлять уведомления из самого импорта.
Чем addInsertIgnore() отличается от addMerge(), если оба защищают от дублей?
addInsertIgnore() пропускает строку, если она конфликтует с уникальным ключом, и ничего не меняет. addMerge() при конфликте обновляет переданные поля — это upsert. Оба подключаются трейтами стратегий добавления к Table-классу.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить