Задать вопрос

Как через getlist вывести множественное свойство привязка к другим элементам инфоблока?

Доброго времени суток

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

Свойство называется PROPERTY_ELEMENT.

CModule::IncludeModule('iblock'); 
$el = new CIBlockElement();
$ID = $arResult['ID']; 

$arProducts = $el->GetList(
   array('SORT' => 'ASC'),
   array(
      'IBLOCK_ID' => 16,
      'ACTIVE' => 'Y',
      'GLOBAL_ACTIVE' => 'Y',
      'PROPERTY_LOOKBOOK.ID' => $ID
   ),
   false,
   false,
	array('IBLOCK_ID','ID','NAME','PROPERTY_ELEMENT.NAME', 'PROPERTY_ELEMENT.CODE', 'PROPERTY_ELEMENT.PREVIEW_PICTURE')
);

while($prod = $arProducts-> GetNext()){

	if(count($prod)>0){

		echo '<pre>'; print_r($prod); echo '</pre>'; 
}
else{
	echo "Таблица пустая.";
}

}
?>


Array
(
    [IBLOCK_ID] => 16
    [~IBLOCK_ID] => 16
    [ID] => 161
    [~ID] => 161
    [NAME] => Пуховик черный и белый
    [~NAME] => Пуховик черный и белый
    [PROPERTY_ELEMENT_NAME] => Пуховик на объемной стойке (Черный)
    [~PROPERTY_ELEMENT_NAME] => Пуховик на объемной стойке (Черный)
    [PROPERTY_ELEMENT_CODE] => pukhovik-na-obemnoy-stoyke-chernyy
    [~PROPERTY_ELEMENT_CODE] => pukhovik-na-obemnoy-stoyke-chernyy
    [PROPERTY_ELEMENT_PREVIEW_PICTURE] => 
    [~PROPERTY_ELEMENT_PREVIEW_PICTURE] => 
    [SORT] => 500
    [~SORT] => 500
)


Array
(
    [IBLOCK_ID] => 16
    [~IBLOCK_ID] => 16
    [ID] => 161
    [~ID] => 161
    [NAME] => Пуховик черный и белый
    [~NAME] => Пуховик черный и белый
    [PROPERTY_ELEMENT_NAME] => Пуховик на объемной стойке (белый)
    [~PROPERTY_ELEMENT_NAME] => Пуховик на объемной стойке (белый)
    [PROPERTY_ELEMENT_CODE] => pukhovik-na-obemnoy-stoyke-belyy
    [~PROPERTY_ELEMENT_CODE] => pukhovik-na-obemnoy-stoyke-belyy
    [PROPERTY_ELEMENT_PREVIEW_PICTURE] => 
    [~PROPERTY_ELEMENT_PREVIEW_PICTURE] => 
    [SORT] => 500
    [~SORT] => 500
)


Array
(
    [IBLOCK_ID] => 16
    [~IBLOCK_ID] => 16
    [ID] => 162
    [~ID] => 162
    [NAME] => Пуховик красный
    [~NAME] => Пуховик красный
    [PROPERTY_ELEMENT_NAME] => Пуховик на объемной стойке (Красный)
    [~PROPERTY_ELEMENT_NAME] => Пуховик на объемной стойке (Красный)
    [PROPERTY_ELEMENT_CODE] => pukhovik-na-obemnoy-stoyke-krasnyy
    [~PROPERTY_ELEMENT_CODE] => pukhovik-na-obemnoy-stoyke-krasnyy
    [PROPERTY_ELEMENT_PREVIEW_PICTURE] => 
    [~PROPERTY_ELEMENT_PREVIEW_PICTURE] => 
    [SORT] => 500
    [~SORT] => 500
)


из вывода видно , что создается отдельный массив к [NAME] => Пуховик черный и белый , но с разными свойствами
  • Вопрос задан
  • 4346 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
gromdron
@gromdron
Работаю с Bitrix24
Такое поведение встречается когда вы используете Инфоблоки вверсии 1 (хранение свойств в общей таблице) и запрашиваете множественное свойство.
Чтобы исключить этот момент, можно изменить механику работы (первести их на версию 2), т.е. изменить расположение свойств в отдельной таблице.

Это конечно накладывает определенные ограничения, но зато в getList'ах пропадут дубли элементов.
См. документацию: https://dev.1c-bitrix.ru/learning/course/?COURSE_I...
Ответ написан
@pavel__sidorov Автор вопроса
Немного переписал, но все равно выводятся все записи. Свойства не группируются к одному элементу. Используются инфоблоки 2.0.

<?
$ID = $arResult['ID']; 
$arSelect = Array("ID", "NAME", "DATE_ACTIVE_FROM", 'PROPERTY_ELEMENT.ID', 'PROPERTY_ELEMENT.NAME', 'PROPERTY_ELEMENT.CODE',);
$arFilter = Array("IBLOCK_ID"=>16, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", 'PROPERTY_LOOKBOOK.ID' => $ID);
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);
while($ob = $res->GetNextElement())
{
 $arFields = $ob->GetFields();
 echo '<pre>';print_r($arFields);echo '</pre>'; 
 $arRes = $ob->GetProperties(); // свойства элемента
 echo '<pre>';print_r($arRes);echo '</pre>'; 
}
?>


вывод точно также же при обращении к массиву
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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