Мы уже рассмотрели, как выбирать данные с помощью getList в D7 ORM. Теперь давайте разберем полный цикл CRUD-операций (Create, Read, Update, Delete), который позволяет полностью управлять данными любой сущности — будь то элемент инфоблока, раздел или запись в Highload-блоке.
Все ORM-классы (ElementTable, SectionTable, *Table) наследуются от \Bitrix\Main\Entity\DataManager и предоставляют унифицированные методы: add, update, delete.
1. Создание (Create) с помощью метода add
Метод add принимает один аргумент — массив с данными для новой записи.
Синтаксис:
\Namespace\MyTable::add(array $data)
Возвращаемое значение:
Объект \Bitrix\Main\Entity\AddResult. С его помощью можно проверить успешность операции и получить ID новой записи.
Пример: Добавление нового элемента в инфоблок
use Bitrix\Main\Loader;
use Bitrix\Iblock\ElementTable;
Loader::includeModule('iblock');
$data = [
"IBLOCK_ID" => 5,
"NAME" => "Новый элемент через D7 ORM",
"CODE" => "new-element-d7",
"ACTIVE" => "Y"
];
$result = ElementTable::add($data);
if ($result->isSuccess()) {
$newId = $result->getId();
echo "Элемент успешно создан с ID: " . $newId;
} else {
$errors = $result->getErrorMessages();
echo "Произошли ошибки: <br>" . implode("<br>", $errors);
}
2. Обновление (Update) с помощью метода update
Метод update принимает два аргумента: первичный ключ записи (обычно ID) и массив с полями, которые нужно обновить.
Синтаксис:
\Namespace\MyTable::update($primaryKey, array $data)
Возвращаемое значение:
Объект \Bitrix\Main\Entity\UpdateResult.
Пример: Обновление названия и деактивация элемента
$idToUpdate = 123; // ID элемента для обновления
$data = [
"NAME" => "Обновленное название элемента",
"ACTIVE" => "N"
];
$result = ElementTable::update($idToUpdate, $data);
if ($result->isSuccess()) {
echo "Элемент с ID {$idToUpdate} успешно обновлен.";
} else {
$errors = $result->getErrorMessages();
echo "Произошли ошибки: <br>" . implode("<br>", $errors);
}
3. Удаление (Delete) с помощью метода delete
Метод delete принимает первичный ключ записи, которую нужно удалить.
Синтаксис:
\Namespace\MyTable::delete($primaryKey)
Возвращаемое значение:
Объект \Bitrix\Main\Entity\DeleteResult.
Пример: Удаление элемента
$idToDelete = 125;
$result = ElementTable::delete($idToDelete);
if ($result->isSuccess()) {
echo "Элемент с ID {$idToDelete} успешно удален.";
} else {
$errors = $result->getErrorMessages();
echo "Произошли ошибки: <br>" . implode("<br>", $errors);
}
Ключевые методы объекта Result
Все три метода (add, update, delete) возвращают объект-результат, у которого есть два важнейших метода:
- $result->isSuccess(): Возвращает true, если операция прошла без ошибок, и false в противном случае. Всегда проверяйте результат!
- $result->getErrorMessages(): Возвращает массив с текстовыми сообщениями об ошибках, если isSuccess() вернул false.
Работа со свойствами
Для работы со свойствами при добавлении/обновлении через ElementTable используется специальный ключ PROPERTY_VALUES.
// Добавляем элемент со свойством
$data = [
"IBLOCK_ID" => 5,
"NAME" => "Элемент со свойством",
"PROPERTY_VALUES" => [
"MY_PROPERTY_CODE" => "Значение свойства"
]
];
$result = ElementTable::add($data);
Вывод:
D7 ORM предоставляет невероятно удобный и, что самое главное, единообразный API для всех операций с данными. Независимо от того, работаете ли вы с элементами, разделами, пользователями или Highload-блоками, методы add, update и delete и их результаты будут работать одинаково. Это сильно упрощает разработку и делает код чище и предсказуемее.
Bitrix D7 ORM, CRUD, add, update, delete, DataManager, AddResult, UpdateResult, DeleteResult, isSuccess, getErrorMessages.