Cache в getList() с примерами

Внимание! Работает режим премодерации. Все сообщения публикуются после проверки!
Страницы: 1
Ответить
RSS
Cache в getList() с примерами
Встроенный кеш ORM в Битриксе: cache в getList() с примерами

ORM в Битриксе (D7) позволяет кешировать результаты запросов к базе  данных прямо в методах getList(), getByPrimary(), getRow() и других.  Достаточно передать параметр cache — и система сама сформирует ключ  кеша, сохранит результат и очистит его при изменении данных.
Кешируем на 5 минут запрос к инфоблоку для получения 20 последних активных товаров с информацией об их категориях, используя ORM-кеш для оптимизации производительности.
Код
<?php
// Пример кешированного запроса ORM для получения списка активных товаров с привязкой к категориям

use Bitrix\Main\Loader;
use Bitrix\Iblock\ElementTable;
use Bitrix\Iblock\SectionElementTable;
use Bitrix\Iblock\SectionTable;
use Bitrix\Main\ORM\Fields\Relations\Reference;
use Bitrix\Main\ORM\Query\Join;

if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();

Loader::includeModule('iblock');

$result = ElementTable::getList([
    'select' => [
        'ID',
        'NAME',
        'CODE',
        'ACTIVE_FROM',
        'SECTION_NAME' => 'SECTION.NAME',
        'SECTION_CODE' => 'SECTION.CODE'
    ],
    'filter' => [
        '=IBLOCK_ID' => 2,
        '=ACTIVE' => 'Y',
        '<=ACTIVE_FROM' => new \Bitrix\Main\Type\DateTime(),
        [
            'LOGIC' => 'OR',
            ['>=ACTIVE_TO' => new \Bitrix\Main\Type\DateTime()],
            ['ACTIVE_TO' => null]
        ]
    ],
    'runtime' => [
        new Reference(
            'SECTION_ELEMENT',
            SectionElementTable::class,
            Join::on('this.ID', 'ref.IBLOCK_ELEMENT_ID'),
            ['join_type' => 'INNER']
        ),
        new Reference(
            'SECTION',
            SectionTable::class,
            Join::on('this.SECTION_ELEMENT.IBLOCK_SECTION_ID', 'ref.ID'),
            ['join_type' => 'LEFT']
        )
    ],
    'order' => ['ACTIVE_FROM' => 'DESC'],
    'limit' => 20,
    'cache' => [
        'ttl' => 300,
        'cache_joins' => true
    ]
]);

$products = [];
while ($product = $result->fetch()) {
    $products[] = $product;
}

// Использование данных
foreach ($products as $product) {
    echo "{$product['NAME']} (Категория: {$product['SECTION_NAME']})<br>";
}
Страницы: 1
Ответить
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Интернет-магазин на готовом решении

от 7 дней

от 40 000 рублей
запуск сайта в максимально короткие сроки

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Модули и компоненты для «1С-Битрикс»

оценка производится на основе предоставленного Технического Задания

от 20 000 рублей
Разработка дополнительных модулей для 1С-Битрикс, расширение функционала, внедрение любых решений, требующихся для выполнения ваших бизнес-задач.

* стоимость зависит от конкретной задачи, ее объема и сложности выполняемых работ.

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр