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
Примеры
// Инфоблок и его свойства $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']; }