Блог Горошко Андрея 1C-Битрикс Работа с объектами D7 ORM: fetchObject, save() и коллекции fetchCollection

Работа с объектами D7 ORM: fetchObject, save() и коллекции fetchCollection

Метод 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());
    }
}

Преимущества объектов:

  1. Типизация: IDE подсказывает доступные методы (getName, setName и т.д.).
  2. Инкапсуляция: Логика работы с полями скрыта внутри объекта.
  3. Состояние: Объект «знает», был ли он изменен, и сохраняет только то, что нужно.

Получение коллекции объектов: 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(), типизация, современная разработка Битрикс.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Чек-лист: Стандарты современной разработки на 1С-Битрикс (D7, ORM, Controllers)Чек-лист: Стандарты современной разработки на 1С-Битрикс (D7, ORM, Controllers)

ВведениеСовременный 1С-Битрикс давно ушел от концепции «CMS старой школы» с глобальными переменными и прямыми SQL-запросами. Переход на ядро D7 превратил платформу в мощный PHP-фреймворк. Чтобы ваш код был безопасным, производительным

Стоимость разработки закрытого портала франшизы на платформе 1С-БитриксСтоимость разработки закрытого портала франшизы на платформе 1С-Битрикс

Прозрачный расчет бюджета, честные сметы и понимание совокупной стоимости владения (TCO) — залог успешного сотрудничества и окупаемости инвестиций в веб-разработку на 1С-Битрикс. В статье «Стоимость разработки закрытого портала франшизы на

Разработка сайта для агентства праздников, свадеб и ивент-индустрииРазработка сайта для агентства праздников, свадеб и ивент-индустрии

Создание и развитие эффективного веб-ресурса по направлению «Разработка сайта для агентства праздников, свадеб и ивент-индустрии» позволяет усилить позиции бренда на рынке, автоматизировать взаимодействие с заказчиками и кратно увеличить поток входящих