@Kirill-Gorelov
С ума с IT

Битрикс, я сдаюсь CIBlockElement::SubQuery?

Мне нужно достать название элемента из другого инфоблока по его id(элемента)(id элемента у меня является "привязкой к элементу")

Сейчас это сделано так:
$arSelect = Array("ID", "NAME", "PROPERTY_c_serv", "PROPERTY_P_CAT_VALUE");
$arFilter = Array("IBLOCK_ID" => "10");
$res = CIBlockElement::GetList(Array(), $arFilter, false, array("nPageSize" => 25), $arSelect);
while($arFields = $res->fetch()){
    //тут я делаю дополнительный запрос
    $arSelect_cat = Array("ID", "NAME");
    $arFilter_cat = Array("IBLOCK_ID"=>"11", "ACTIVE"=>"Y","ID"=>$arFields["PROPERTY_P_CAT_VALUE"]);
    $res_cat = CIBlockElement::GetList(Array(), $arFilter_cat, false, false, $arSelect_cat);
    while($ob_cat = $res_cat->GetNextElement()){
        $arFields_cat = $ob_cat->GetFields();
        $arFields["category"] = $arFields_cat["NAME"];
    }
}


Ну и соответственно это ни в какие ворота.
Поэтому хочу сделать под запрос, с помощью CIBlockElement::SubQuery (Документация)

Я его уже несколько раз переписываю, ничего не меняется, абсолютно.
Переписал я его вот так:
$arSelect = Array("ID", "NAME", "PROPERTY_c_serv", "PROPERTY_P_CAT_VALUE");
$arFilter = Array("IBLOCK_ID" => "10", "ID" => CIBlockElement::SubQuery("NAME", array("IBLOCK_ID"=>"11", "ACTIVE"=>"Y","ID"=>$arFields["PROPERTY_P_CAT_VALUE"])));
$res = CIBlockElement::GetList(Array(), $arFilter, false, array("nPageSize" => 25), $arSelect);
while($arFields = $res->fetch()){
    //код
}


И в результате ничего не меняется. Ни отображается, ни ошибки ничего не происходит,как запрос был так он и работал.
Что я делаю не так? Кто уже делал такие под запросы, подскажите, буду весьма благодарен. Или хотя бы ткните где я сделал не так(
  • Вопрос задан
  • 252 просмотра
Решения вопроса 1
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
Если я правильно понял, у Вас на сайте два ИБ. Допустим ИБ1 и ИБ2.
В ИБ1 есть свойство типа "Привязка к элементу инфоблока". Вы хотите при запросе элементов из ИБ1 выбрать поля элементов из ИБ2, которые привязаны к элементам ИБ1.
Для этого не нужно дополнительных запросов.
Открываем документацию по CIblockElement::GetList

Вот что там написано про выборку таких данных
PROPERTY_{PROPERTY_CODE}.{FIELD} - по значению поля элемента указанного в качестве привязки. PROPERTY_CODE - символьный код свойства типа привязка к элементам. FIELD может принимать значения:
  • ID
  • TIMESTAMP_X
  • MODIFIED_BY
  • CREATED
  • CREATED_DATE
  • CREATED_BY
  • IBLOCK_ID
  • ACTIVE
  • ACTIVE_FROM
  • ACTIVE_TO
  • SORT
  • NAME
  • SHOW_COUNTER
  • SHOW_COUNTER_START
  • CODE
  • TAGS
  • XML_ID
  • STATUS


PROPERTY_{PROPERTY_CODE}.PROPERTY_{PROPERTY_CODE2} - по значению свойства элемента указанного в качестве привязки. PROPERTY_CODE - символьный код свойства типа привязки к элементам. PROPERTY_CODE2- код свойства связанных элементов.

Таким образом, для того чтобы выбрать название привязанного элемента в вашем случае, будет достаточно в $arSelect передать PROPERTY_P_CAT.NAME
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@anton99zel
28 класс средней школы
$arSelect = Array("ID", "NAME", "PROPERTY_c_serv", "PROPERTY_P_CAT_VALUE");
$arFilter = Array("IBLOCK_ID" => "10");
$res = CIBlockElement::GetList(Array(), $arFilter, false, array("nPageSize" => 25), $arSelect);
while($arFields = $res->fetch()){
$ID = $arFields["PROPERTY_P_CAT_VALUE"];
$rest = CIBlockElement::GetByID($ID);
	if($ar_rest = $rest->GetNext())
  		echo $ar_rest['NAME']; // Название элемента 
}

И пишите символьные коды в системе заглавными буквами
Ответ написан
Роман Грицук
У меня такая ситуация, выборка по кол-ву в предложении.
$arSubQuery = array(
                '>CATALOG_QUANTITY' => 0,
            );
            $arrFilter = array_merge(
                array(
                    'ID' => CIBlockElement::SubQuery('PROPERTY_CML2_LINK', $arSubQuery)
                )
            );


А если предложений у товара нет, и у него кол-во > 0, то он не отображается. Как добавить условие к моему запросу, чтобы фильтровал и товары по кол-ву в PROPERTY_CML2_LINK, и по собственному кол-ву? Добавить LOGIC OR?
Ответ написан
Ваш ответ на вопрос

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

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