Diversia
@Diversia

Битрикс: как выбрать элементы из нескольких инфоблоков одним запросом?

Подскажите пожалуйста, возможно ли выбрать элементы из разных инфоблоков одним запросом? Пробовал два варианта, но не получается:

1 вариант
$arSelect = array(
	"ID",
	"NAME",
	"IBLOCK_ID",
	"IBLOCK_CODE",
	"CODE",
	"PROPERTY_photo"
);

$arFilter = array(
	"ID" => $arList, // массив с id всех нужных элементов
	"IBLOCK_ID" => array(3,10),
);

$rsElement = CIBlockElement::GetList(Array("NAME" => "ASC"), $arFilter, false, Array(), $arSelect);
while($arElement = $rsElement->Fetch())
{
	print $arElement["NAME"]. "<br>";
}

2 вариант
$arSelect = array(
	"ID",
	"NAME",
	"IBLOCK_ID",
	"IBLOCK_CODE",
	"CODE",
	"PROPERTY_photo"
);

$arFilter = array(
	array(
		"LOGIC" => "OR",
		array("IBLOCK_ID" => 3, "ID" => $genres), // массив с id нужных элементов из 3 ИБ
		array("IBLOCK_ID" => 10, "ID" => $tags), // массив с  id нужных элементов из 10 ИБ
	),
);

$rsElement = CIBlockElement::GetList(Array("NAME" => "ASC"), $arFilter, false, Array(), $arSelect);
while($arElement = $rsElement->Fetch())
{
	print $arElement["NAME"]. "<br>";
}


В варианте 1: если указать только один инфоблока - выводится. А нужно один запросом несколько инфоблоков.
  • Вопрос задан
  • 5387 просмотров
Решения вопроса 1
sabramovskikh
@sabramovskikh
Не указывай ИБ вообще, вообще у меня получалось как-то без указания ID ИБ, но лучше так не делать. Создай 2 запроса
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
OlegMifle
@OlegMifle
php-программист
Попробуй на d7 через ElementTable::getList();.
Ответ написан
Комментировать
rixaman
@rixaman
Первый вариант рабочий точно, делал так на своих проектах, видимо у вас где-то ошибка. Как указан $arList и те ли указаны IBLOCK_ID? Без указания IBLOCK_ID в фильтре тоже работает, как сказал выше Сергей.
Перепроверил на своём проекте на примере ниже, работает и выводит элементы из нескольких инфоблоков.
$arSelect = array(
  "ID",
  "NAME",
  "IBLOCK_ID",
  "IBLOCK_CODE",
  "CODE",
  "PROPERTY_PHOTO"
);

$arFilter = array(
  "ID" => array(123,1234,2345),
  "IBLOCK_ID" => array(1,2,3),
);

$rsElement = CIBlockElement::GetList(array("NAME" => "ASC"), $arFilter, false, array(), $arSelect);
while($arElement = $rsElement->Fetch())
{
  echo "<pre>";
  print_r($arElement);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы