Anadi
@Anadi
Если ответ Вам помог мой, решением отметье его!

С чем связанно такое поведение, Fetch() сломался, в чем трабл?

Привет всем!

Не понятно из-за чего перестал отрабатывать Fetch() для объекта хайлоад.

$HLObject = $HLDataClass::getList(array(
        "select" => array("*"),
        "filter" => $arFilter
));

debug($HLObject); // выводит объект, как и было изначально

while ($arHLItem = $HLObject->Fetch()) {
        debug($arHLItem);  // пусто, пару дней назад было всё ок!
}


Я в недоумении! С чем связано такое поведение?

debug() - просто обертка для print_r()
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
gromdron
@gromdron
Работаю с Bitrix24
Добрый день, Автор.

Во-первых: прекратите использовать print_r для вывода результатов, смотрите хотя бы через var_dump() (ибо у битрикс есть обьекты ссылающиемся так или иначе на самого себя и можете попасть в рекурсию).

Во-вторых: если выв вошли в while, значит данные есть, если вы в него не вошли, значит их нет.

В-третьих: с 18 версии, можно больше не фетчить, а использовать foreach.

Попробуйте следующий код:
\ob_start();
echo PHP_EOL."<pre>".PHP_EOL;

$highloadItems = $HLDataClass::getList(array(
	"select" => ["*"],
	"filter" => $arFilter
));

var_dump([
	'filter' => $arFilter,
	'rowsCount' => $highloadItems->getSelectedRowsCount()
]);

foreach ($highloadItems as $highloadItem)
{
	var_dump( (array) $highloadItem );
}

\file_put_contents($_SERVER['DOCUMENT_ROOT'].'/uplod/testlog.log', \ob_get_clean(), FILE_APPEND);

Собственно код попытается получить все данные по фильтру arFilter, выведет в лог этот массив и количество найденных элементов. Затем каждый найденный элемент в виде ассоциативного массива.

Вывод перенаправит в файл /upload/testlog.log от корня вашего сайта.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы