Использование метода 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

Интернет-магазин от 120 000 руб., срок от 4 недель

Платформа для продажи товаров или услуг. Включает интерактивные формы обратной связи в каждой карточке товара, а также множество статичных и динамичных разделов.

Корпоративный сайт от 60 000 руб., срок от 3 недель

Готовый информационный ресурс, включающий лицензию на 1С-Битрикс «Стандарт», технологию «Композитный сайт».

Лендинг от 25 000 руб., срок от 2 недель

Компактный сайт, идеально подходящий для старта. На одной странице можно представить ключевые преимущества вашей компании и разместить форму для обратной связи.