Метод getList в D7 ORM по умолчанию возвращает массив данных (fetch()). Но вся мощь ORM раскрывается при работе с объектами. Это делает код более строгим, читаемым и защищенным от ошибок, благодаря автодополнению в IDE.
Получение одного объекта: fetchObject()
Вместо fetch(), который возвращает ассоциативный массив, используйте fetchObject(). Он вернет экземпляр типизированного объекта вашей сущности.
use Bitrix\Main\Loader;
use Bitrix\Iblock\ElementTable;
Loader::includeModule('iblock');
$elementObject = ElementTable::getList([
'select' => ['ID', 'NAME', 'ACTIVE'],
'filter' => ['=ID' => 123]
])->fetchObject();
if ($elementObject) {
// Работаем с объектом через геттеры и сеттеры
echo "Название: " . $elementObject->getName(); // ->getName() вместо ['NAME']
// Изменяем данные
$elementObject->setName("Новое название объекта");
$elementObject->setActive("N");
// Сохраняем изменения в базу
$result = $elementObject->save();
if ($result->isSuccess()) {
echo "Объект успешно сохранен!";
} else {
print_r($result->getErrorMessages());
}
}
Преимущества объектов:
- Типизация: IDE подсказывает доступные методы (getName, setName и т.д.).
- Инкапсуляция: Логика работы с полями скрыта внутри объекта.
- Состояние: Объект «знает», был ли он изменен, и сохраняет только то, что нужно.
Получение коллекции объектов: fetchCollection()
Если вам нужно получить несколько записей, используйте fetchCollection(). Этот метод возвращает специальный объект-коллекцию, который можно перебирать в цикле foreach, как обычный массив, но с дополнительными возможностями.
use Bitrix\Iblock\ElementTable;
$elementCollection = ElementTable::getList([
'select' => ['ID', 'NAME'],
'filter' => ['=IBLOCK_ID' => 5, '=ACTIVE' => 'Y'],
'limit' => 10
])->fetchCollection();
// Перебираем коллекцию объектов
foreach ($elementCollection as $elementObject) {
echo $elementObject->getName() . "<br>";
// Можно также изменять и сохранять каждый объект
// $elementObject->setName(...);
// $elementObject->save();
}
// Коллекции предоставляют удобные методы
$idList = $elementCollection->getIdList(); // Получить массив всех ID
print_r($idList);
Преимущества коллекций:
* Содержат только объекты одного типа.
* Предоставляют удобные "хелперы" (`getIdList`, `getNameList` и т.д.).
* Позволяют выполнять групповые операции (например, `fill` для дозагрузки данных).
Создание нового объекта
Новый объект можно создать, а затем заполнить и сохранить.
use Bitrix\Iblock\ElementTable;
// 1. Создаем пустой объект
$newElement = ElementTable::createObject();
// 2. Заполняем поля
$newElement->setIblockId(5);
$newElement->setName('Новый объектный элемент');
$newElement->setActive('Y');
$newElement->setCode('new-object-element');
// 3. Сохраняем
$result = $newElement->save();
if ($result->isSuccess()) {
echo "Создан элемент с ID: " . $result->getId();
} else {
print_r($result->getErrorMessages());
}
Вывод:
Работа через fetchObject и fetchCollection — это следующий шаг в освоении D7 ORM. Она переводит вашу разработку с уровня процедурной работы с массивами на полноценный объектно-ориентированный подход, делая код более надежным, предсказуемым и профессиональным.
Bitrix D7 ORM, fetchObject, fetchCollection, ORM объекты, ORM коллекции, save(), типизация, современная разработка Битрикс.