Bitrix D7 для инфоблоков
Подключаем модуль:
\Bitrix\Main\Loader::includeModule('iblock');
Делаем запрос в таблицу элементов инфоблока
$dbItems = \Bitrix\Iblock\ElementTable::getList(array(
'order' => array('SORT' => 'ASC'), // сортировка
'select' => array('ID', 'NAME', 'IBLOCK_ID', 'SORT', 'TAGS'), // выбираемые поля, без свойств. Свойства можно получать на старом ядре \CIBlockElement::getProperty
'filter' => array('IBLOCK_ID' => 4), // фильтр только по полям элемента, свойства (PROPERTY) использовать нельзя
'group' => array('TAGS'), // группировка по полю, order должен быть пустой
'limit' => 1000, // целое число, ограничение выбираемого кол-ва
'offset' => 0, // целое число, указывающее номер первого столбца в результате
'count_total' => 1, // дает возможность получить кол-во элементов через метод getCount()
'runtime' => array(), // массив полей сущности, создающихся динамически
'data_doubling' => false, // разрешает получение нескольких одинаковых записей
'cache' => array( // Кеш запроса, почему-то в офф. документации об этом умалчивают
'ttl' => 3600,
'cache_joins' => true
),
));
Что можно сделать с $dbItems?
$dbItems->fetch(); // или $dbItems->fetchRaw() получение одной записи, можно перебрать в цикле while ($arItem = $dbItems->fetch())
$dbItems->fetchAll(); // получение всех записей
$dbItems->getCount(); // кол-во найденных записей без учета limit, доступно если при запросе было указано count_total = 1
$dbItems->getSelectedRowsCount(); // кол-во полученных записей с учетом limit
В какие таблицы инфоблоков можно делать запросы
\Bitrix\Iblock\TypeTable::getList(); // типы инфоблоков
\Bitrix\Iblock\IblockTable::getList(); // инфоблоки
\Bitrix\Iblock\PropertyTable::getList(); // свойства инфоблоков
\Bitrix\Iblock\PropertyEnumerationTable::getList(); // значения свойств, например списков
\Bitrix\Iblock\SectionTable::getList(); // Разделы инфоблоков
\Bitrix\Iblock\ElementTable::getList(); // Элементы инфоблоков
\Bitrix\Iblock\InheritedPropertyTable::getList(); // Наследуемые свойства (seo шаблоны)
// и другие не особо используемые, таблицы свойств элементов нету
Помимо getList можно использовать другие методы
add(array $data) // добавление элемента
addMulti($rows, $ignoreEvents = false)
checkFields(Result $result, $primary, array $data) // метод проверяет поля данных перед записью в БД.
delete($primary) // удаление элемента по ID
getById($id) // получение элемента по ID
getByPrimary($primary, array $parameters = array()) // метод возвращает выборку по первичному ключу сущности и по опциональным параметрам \Bitrix\Main\Entity\DataManager::getList.
getConnectionName() // метод возвращает имя соединения для сущности. 12.0.9
getCount($filter = array(), array $cache = array()) // метод выполняет COUNT запрос к сущности и возвращает результат. 12.0.10
getEntity() // метод возвращает объект сущности.
getList(array $parameters = array()) // получение элементов, подробнее было выше
getMap() // метод возвращает описание карты сущностей. 12.0.7
getRow(array $parameters) // метод возвращает один столбец (или null) по параметрам для \Bitrix\Main\Entity\DataManager::getList.
getRowById($id) // метод возвращает один столбец (или null) по первичному ключу сущности. 14.0.0
getTableName() // метод возвращает имя таблицы БД для сущности. 12.0.7
query() // метод создаёт и возвращает объект запроса для сущности.
update($primary, array $data) // обновление элемента по ID
updateMulti($primaries, $data, $ignoreEvents = false)
enableCrypto($field, $table = null, $mode = true) // метод устанавливает флаг поддержки шифрования для поля. 17.5.14
cryptoEnabled($field, $table = null) // метод возвращает true если шифрование разрешено для поля. 17.5.14
Всё это применимо и к другим модулям, только названия таблиц другие. Многое можно почерпнуть из файла /bitrix/modules/main/lib/orm/data/datamanager.php
Примеры
Инфоблок и его свойства
$arIblock = \Bitrix\Iblock\IblockTable::getList(array(
'filter' => array('CODE' => 'news'),
))->fetch();
$arProps = \Bitrix\Iblock\PropertyTable::getList(array(
'select' => array('*'),
'filter' => array('IBLOCK_ID' => $arIblock['ID'])
))->fetchAll();
Значения определенного свойства типа список
$dbEnums = \Bitrix\Iblock\PropertyEnumerationTable::getList(array(
'order' => array('SORT' => 'asc'),
'select' => array('*'),
'filter' => array('PROPERTY_ID' => $arIblockProp['ID'])
));
while($arEnum = $dbEnums->fetch()) {
$arIblockProp['ENUM_LIST'][$arEnum['ID']] = $arEnum;
}
Элементы инфоблока и их свойства
$dbItem = \Bitrix\Iblock\ElementTable::getList(array(
'select' => array('ID', 'IBLOCK_ID', 'NAME'),
'filter' => array('IBLOCK_ID' => $arIblock['ID']),
'limit' => 100,
'order' => array('TIMESTAMP_X' => 'ASC')
));
while ($arItem = $dbItem->fetch()) {
$dbProperty = \CIBlockElement::getProperty($arItem['IBLOCK_ID'], $arItem['ID'], array("sort", "asc"), array('CODE' => 'LINK_ARTICLES'));
while ($arProperty = $dbProperty->GetNext()) {
if ($arProperty['VALUE']) {
$arItem['LINK_ARTICLES'][] = $arProperty['VALUE'];
}
}
$arItems[] = $arItem;
}
Количество заказов пользователя
$dbOrders = \Bitrix\Sale\Order::getList(array(
'filter' => array('USER_ID' => $userId),
'group' => array('COUNT' => 'USER_ID'),
'select' => array('CNT'),
'runtime' => array(
new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)')
)
));
if ($arOrders = $dbOrders->fetch()) {
echo $arOrders['CNT'];
}
Источник: https://blog.budagov.ru/bitrix-d7-dlya-infoblokov/