Использование метода Result::fetchRaw() в 1С-Битрикс

В этой статье мы подробно разберём, что делает метод `\Bitrix\Main\DB\Result::fetchRaw()`, в каких случаях его стоит использовать и как правильно работать с его результатами. Данный метод позволяет получить одну строку результата SQL-запроса в необработанном (сыром) виде – именно в том формате, в котором она хранится в базе данных.

Использование метода Result::fetchRaw() в 1С-Битрикс

Что такое `fetchRaw`?

Метод:

array|false public \Bitrix\Main\DB\Result::fetchRaw();
  • Возвращает:
    • Ассоциативный массив (если данные найдены)
    • `false` (если данные закончились или строк нет)
  • Параметров: Нет

Главное отличие от часто используемого `fetch()` состоит в том, что `fetchRaw()` возвращает именно «сырые» данные из БД, без каких-либо внутренних преобразований. Это бывает полезно, если нужно получать информацию в оригинальном формате (например, когда нужно сохранить «как есть» двоичные поля, данные в определённой кодировке и т. д.).

Сценарии использования

  1. Получение необработанных данных для специализированной обработки Если вы создаёте интеграцию или пишете функционал, где важны двоичные данные, зашифрованная информация, нестандартное хранение дат и т. д., метод `fetchRaw()` будет как нельзя кстати.
  2. Сравнение данных Когда важно сравнить точные значения, хранящиеся в базе, без модификаций, может быть полезно получить именно «сырые» данные.
  3. Оптимизация Иногда в больших проектах, где написана своя логика обработки данных после выборки из БД, выгодно явно управлять процессом преобразования записей. `fetchRaw()` даёт вам полный контроль над преобразованием – вы можете сами решить, что и как с данными делать.

Пример использования

Ниже приведён простой пример, показывающий, как работать с `fetchRaw()`. В примере мы делаем выборку из таблицы, содержащей, предположим, пользователей, и выводим первую найденную запись в «сыром» виде.

<?php

use Bitrix\Main\Application;
use Bitrix\Main\DB\Result;

$connection = Application::getConnection();

// Пример SQL-запроса (используйте свои таблицы и условия)
$sql = "SELECT * FROM b_user WHERE ACTIVE='Y'";

$result = $connection->query($sql);
/** @var Result $result **/

// Получаем одну строку данных в «сыром» виде
$row = $result->fetchRaw();

if ($row !== false) {
    echo '<pre>';
    print_r($row);
    echo '</pre>';
} else {
    echo "Нет данных или запрос не вернул результатов.";
}

Пошаговое объяснение

  1. Подключение к БД: Используем метод `Application::getConnection()`, чтобы получить объект подключения к базе данных в 1С-Битрикс.
  2. Подготовка и выполнение запроса: Вызываем `$connection->query($sql)`, где в переменной `$sql` хранится обычный SQL-запрос.
  3. Получение результата: Метод `fetchRaw()` возвращает первую доступную строку результата в виде ассоциативного массива, где:
    • Ключи массива соответствуют названиям полей в таблице БД,
    • Значения – «сырой» контент из этих полей.
  4. Проверка на наличие данных:
    • Если строчки существуют, выведется массив.
    • Если данных нет, метод возвращает `false`.

Использование `fetchRaw` в цикле

Если нужно последовательно обойти все строки результата, можно вызывать `fetchRaw()` в цикле `while`. Код будет выглядеть так:

<?php

use Bitrix\Main\Application;
use Bitrix\Main\DB\Result;

$connection = Application::getConnection();
$sql = "SELECT * FROM b_user";
$result = $connection->query($sql);

while ($row = $result->fetchRaw()) {
    // Здесь вы можете обрабатывать строку, например, выводить данные или сохранять их в массив
    echo 'ID пользователя: ' . $row['ID'] . '<br>';
}

После того как все данные будут «перебраны», при следующем вызове `fetchRaw()` мы получим `false`.

Отличия от `fetch()`

В 1С-Битрикс есть также метод `fetch()`, который возвращает данные в более «приведённом» виде. Например, в некоторых случаях он может:

  • Приводить поля к нижнему/верхнему регистру;
  • Делать дополнительные преобразования чисел, дат и т. д.;
  • Учитывать маппинг полей при работе с ORM-моделью (если используется соответствующий функционал).

`fetchRaw()`, напротив, возвращает массив именно с исходными значениями, лежащими в таблице. Поэтому, если вам нужно избежать каких-либо автоматических преобразований, выбирайте именно `fetchRaw()`.

Когда выбирать `fetchRaw()`?

  • Вы хотите реализовать собственную логику обработки или сохранения данных без участия внутренних механизмов платформы.
  • Необходимо сравнить исходные данные базы данных с чем-либо ещё (например, при импорте/экспорте).
  • Нужно считать специальные поля, которые не должны меняться при выборке (двоичные поля, данные в нестандартном формате).

Важно: если вы не уверены, что хотите именно «сырые» данные, может оказаться безопаснее и проще использовать `fetch()`. В стандартных задачах 1С-Битрикс преобразование данных часто бывает полезно и избавляет от лишних ошибок.

Заключение

Метод `fetchRaw()` в 1С-Битрикс – это удобный инструмент, когда нужно работать с результатами SQL-запроса «как есть» без дополнительных преобразований. Он часто используется в «низкоуровневых» сценариях, требующих тонкого управления данными. Однако перед его применением стоит убедиться, что «сырой» формат действительно нужен, так как иногда проще использовать стандартное `fetch()` с уже приведёнными к привычному виду данными.

Надеемся, что это руководство поможет вам эффективно применять `fetchRaw()` в проектах на 1С-Битрикс и расширит понимание того, как обрабатываются данные из базы. Если у вас остались вопросы или есть интересные кейсы по использованию `fetchRaw()`, обязательно делитесь ими в комментариях к статье!

Теги:  руководство, D7


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

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

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

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

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

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

от 7 дней

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

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

Участие в проекте

привлечение в проект на part-time основе

от 20 000 рублей / неделя

Возможно участие в проекте на ежедневной основе, как разработчика. Занятость - до 20 часов в неделю
Минимальный срок - одна неделя.

* сумма фиксированная